Intent是四大组件间传值的纽带
Intent通过下面的属性来描述以上的某个意图:
1、Action(动作):用来表示意图的动作,如:查看,发邮件,打电话
2、category(类别):用来表示动作的类别。
3、data(数据):表示与动作要操作的数据。如:查看联系人
4、type(数据类型):对data类型的描述。
5、extras(附件信息):附件信息。如:详细资料,一个文件,某事。
6、component(目标组件):目标组件。
显示Intent:对于明确指出了目标组件名称的Intent(调用setComponent或setClass来指定)。
隐式Intent:对于没有明确指出目标组件名称的Intent。于隐式Intent,由于没有明确的目标组件名称,所以必须包含足够的属性信息,他们是:Action,Data,Category。再由Android系统帮助应用程序寻找与Intent请求意图最匹配的组件。
显式Intent直接用组件的名称定义目标组件,这种方式很直接。显式Intent多用于在应用程序内部传递消息。比如在某应用程序内,一个Activity启动一个Service。隐式Intent恰恰相反,由于开发人员往往并不清楚别的应用程序的组件名称,它不会用组件名称定义需要激活的目标组件,它更广泛地用于在不同应用程序之间传递消息。
Intent原理?
你的程序向Android发送一个Inent请求,Android会根据Intent的内容在注册的IntentFilter中选择适当的组件来响应。比如,有一个Activity希望打开网页浏览器查看某一网页的内容,那么这个Activity只需要发出WEB_SEARCH_ACTION请求给Android,Android会根据Intent的请求内容,查询各组件注册时声明的IntentFilter,找到网页浏览器Activity来浏览网页。
什么是intentService?intentService和service区别?
异步处理服务,新开一个线程:handlerThread在线程中发消息,然后接受处理完成后,会清理线程,并且关掉服务。它和Intent没半毛钱关系
IntentService是继承Service的,那么它包含了Service的全部特性,当然也包含service的生命周期,那么与service不同的是,IntentService在执行onCreate操作的时候,内部开了一个线程,去执行你的耗时操作。service提供了一个方法 onStartCommand 当service启动或被调用时候会执行这个方法。
IntentService有以下特点:
(1) 它创建了一个独立的工作线程来处理所有的通过onStartCommand()传递给服务的intents。
(2) 创建了一个工作队列,来逐个发送intent给onHandleIntent()。
(3) 不需要主动调用stopSelft()来结束服务。因为,在所有的intent被处理完后,系统会自动关闭服务。
(4) 默认实现的onBind()返回null
(5) 默认实现的onStartCommand()的目的是将intent插入到工作队列中
Intent的各种用法
显示网页:
Uri uri = Uri.parse("http://www.google.com");
Intent it =newIntent(Intent.ACTION_VIEW,uri);
startActivity(it);
显示地图:
Uri uri = Uri.parse("geo:38.899533,-77.036476");
Intent it =newIntent(Intent.Action_VIEW,uri);
startActivity(it);
路径规划:
Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");
Intent it =newIntent(Intent.ACTION_VIEW,URI);
startActivity(it);
拨打电话:
调用拨号程序
Uri uri = Uri.parse("tel:xxxxxx");
Intent it =newIntent(Intent.ACTION_DIAL, uri);
startActivity(it);
Uri uri = Uri.parse("tel.xxxxxx");
Intent it =newIntent(Intent.ACTION_CALL,uri);
要使用这个必须在配置文件中加入
发送SMS/MMS
调用发送短信的程序
Intent it =newIntent(Intent.ACTION_VIEW);
it.putExtra("sms_body","The SMS text");
it.setType("vnd.android-dir/mms-sms");
startActivity(it);
发送短信
Uri uri = Uri.parse("smsto:0800000123");
Intent it =newIntent(Intent.ACTION_SENDTO, uri);
it.putExtra("sms_body","The SMS text");
startActivity(it);
发送彩信
Uri uri = Uri.parse("content://media/external/images/media/23");
Intent it =newIntent(Intent.ACTION_SEND);
it.putExtra("sms_body","some text");
it.putExtra(Intent.EXTRA_STREAM, uri);
it.setType("image/png");
startActivity(it);
发送Email
Uri uri = Uri.parse("mailto:xxx@abc.com");
Intent it =newIntent(Intent.ACTION_SENDTO, uri);
startActivity(it);
Intent it =newIntent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_EMAIL,"me@abc.com");
it.putExtra(Intent.EXTRA_TEXT,"The email body text");
it.setType("text/plain");
startActivity(Intent.createChooser(it,"Choose Email Client"));
Intent it=newIntent(Intent.ACTION_SEND);
String[] tos={"me@abc.com"};
String[] ccs={"you@abc.com"};
it.putExtra(Intent.EXTRA_EMAIL, tos);
it.putExtra(Intent.EXTRA_CC, ccs);
it.putExtra(Intent.EXTRA_TEXT,"The email body text");
it.putExtra(Intent.EXTRA_SUBJECT,"The email subject text");
it.setType("message/rfc822");
startActivity(Intent.createChooser(it,"Choose Email Client"));
添加附件
Intent it =newIntent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_SUBJECT,"The email subject text");
it.putExtra(Intent.EXTRA_STREAM,"file:///sdcard/mysong.mp3");
sendIntent.setType("audio/mp3");
startActivity(Intent.createChooser(it,"Choose Email Client"));
播放多媒体
Intent it =newIntent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/song.mp3");
it.setDataAndType(uri,"audio/mp3");
startActivity(it);
Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI,"1");
Intent it =newIntent(Intent.ACTION_VIEW, uri);
startActivity(it);
Uninstall 程序
Uri uri = Uri.fromParts("package", strPackageName,null);
Intent it =newIntent(Intent.ACTION_DELETE, uri);
startActivity(it);
Install 程序
Uri installUri = Uri.fromParts("package","xxx",null);
returnIt =newIntent(Intent.ACTION_PACKAGE_ADDED, installUri);
[javascript]view plain
//搜索应用
Uri uri = Uri.parse("market://search?q=pname:pkg_name");
Intent it =newIntent(Intent.ACTION_VIEW, uri);
startActivity(it);
//where pkg_name is the full package path for an application
//显示指定应用的详细页面(这个好像不支持了,找不到app_id)
Uri uri = Uri.parse("market://details?id=app_id");
Intent it =newIntent(Intent.ACTION_VIEW, uri);
startActivity(it);
//where app_id is the application ID, find the ID
//by clicking on your application on Market home
//page, and notice the ID from the address bar
[java]view plain
打开另一程序
Intent i =newIntent();
ComponentName cn =newComponentName("com.drip.android2",
"com.drip.android2.AndroidSearch");
i.setComponent(cn);
i.setAction("android.intent.action.MAIN");
startActivityForResult(i, RESULT_OK);
打开联系人列表
<1>
Intent i =newIntent();
i.setAction(Intent.ACTION_GET_CONTENT);
i.setType("vnd.android.cursor.item/phone");
startActivityForResult(i, REQUEST_TEXT);
<2>
Uri uri = Uri.parse("content://contacts/people");
Intent it =newIntent(Intent.ACTION_PICK, uri);
startActivityForResult(it, REQUEST_TEXT);
打开录音机
Intent mi =newIntent(Media.RECORD_SOUND_ACTION);
startActivity(mi);
从gallery选取图片
Inten t i =newIntent();
i.setType("image/*");
i.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(i,11);
打开照相机
<1>Intent i =newIntent(Intent.ACTION_CAMERA_BUTTON,null);
this.sendBroadcast(i);
<2>longdateTaken = System.currentTimeMillis();
String name = createName(dateTaken) +".jpg";
fileName = folder + name;
ContentValues values =newContentValues();
values.put(Images.Media.TITLE, fileName);
values.put("_data", fileName);
values.put(Images.Media.PICASA_ID, fileName);
values.put(Images.Media.DISPLAY_NAME, fileName);
values.put(Images.Media.DESCRIPTION, fileName);
values.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, fileName);
Uri photoUri = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent inttPhoto =newIntent(MediaStore.ACTION_IMAGE_CAPTURE);
inttPhoto.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(inttPhoto,10);
播放多媒体
Intent it =newIntent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/song.mp3");
it.setDataAndType(uri,"audio/mp3");
startActivity(it);
或者
Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI,"1");
Intent it =newIntent(Intent.ACTION_VIEW, uri);
startActivity(it);
或者
Uri playUri = Uri.parse("file:///sdcard/download/everything.mp3");
returnIt =newIntent(Intent.ACTION_VIEW, playUri);
发送Email
Uri uri = Uri.parse("mailto:xxx@abc.com");
Intent it =newIntent(Intent.ACTION_SENDTO, uri);
startActivity(it);
或者:
Intent intent =newIntent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, address);
intent.putExtra(Intent.EXTRA_SUBJECT, filename);
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+ filename)); ;
intent.setType("text/csv");
startActivity(Intent.createChooser(intent,"EMail File"));
或者:
Intent it =newIntent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_EMAIL,"me@abc.com");
it.putExtra(Intent.EXTRA_TEXT,"The email body text");
it.setType("text/plain");
startActivity(Intent.createChooser(it,"Choose Email Client"));
或者:
Intent it=newIntent(Intent.ACTION_SEND);
String[] tos={"me@abc.com"};
String[] ccs={"you@abc.com"};
it.putExtra(Intent.EXTRA_EMAIL, tos);
it.putExtra(Intent.EXTRA_CC, ccs);
it.putExtra(Intent.EXTRA_TEXT,"The email body text");
it.putExtra(Intent.EXTRA_SUBJECT,"The email subject text");
it.setType("message/rfc822");
startActivity(Intent.createChooser(it,"Choose Email Client"));
或者:
Intent it =newIntent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_SUBJECT,"The email subject text");
it.putExtra(Intent.EXTRA_STREAM,"file:///sdcard/mysong.mp3");
sendIntent.setType("audio/mp3");
startActivity(Intent.createChooser(it,"Choose Email Client"));
后台发送短信
注册权限
代码实现 :
// 获取信息内容
String message ;
// 移动运营商允许每次发送的字节数据有限,我们可以使用Android给我们提供 的短信工具。
if(message !=null) {
SmsManager sms = SmsManager.getDefault();
// 如果短信没有超过限制长度,则返回一个长度的List。
List texts = sms.divideMessage(message);
for(String text : texts) {
sms.sendTextMessage(“这里是接收者电话号码”, “这里是发送者电话号码”, “这里是短信内容”,null,null);
}
}
//说明
sms.sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent):
destinationAddress:接收方的手机号码
scAddress:发送方的手机号码
text:信息内容
sentIntent:发送是否成功的回执,
DeliveryIntent:接收是否成功的回执,
从google搜索内容
Intent intent =newIntent();
intent.setAction(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY,"searchString")
startActivity(intent);
[java]view plain
APK 安装
Intent intent =newIntenet();
String filepath="/SDCard/XXX.apk";
[java]view plain
intent.setDataAndType(Uri.parse("file://"+ filepath),"application/vnd.android.package-archive");
starActivity(intent);
Activity之间的传递
[java]view plain
Intent intent=newIntent();
intent.setClass(MainActivity.this, SecondActivity.class);
startActivity(intent);