Intent---学习笔记

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:[email protected]");

Intent it =newIntent(Intent.ACTION_SENDTO, uri);

startActivity(it);

Intent it =newIntent(Intent.ACTION_SEND);

it.putExtra(Intent.EXTRA_EMAIL,"[email protected]");

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={"[email protected]"};

String[] ccs={"[email protected]"};

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:[email protected]");

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,"[email protected]");

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={"[email protected]"};

String[] ccs={"[email protected]"};

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);

你可能感兴趣的:(Intent---学习笔记)