Android之Intent探究

在一个Android应用中,主要由四种组件组成(四种组件分别为:Activity、Broadcast、Service、ContentProvider),而这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的Android应用。在这些组件之间的通讯中,主要是由Intent协助完成的。

       

Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。

                        

因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。

                 

例如,在一个联系人维护的应用中,当我们在一个联系人列表屏幕(假设对应的Activity为ListActivity)上,点击某个联系人后,希望能够跳出此联系人的详细信息屏幕(假设对应的Activity为DetailActivity)为了实现这个目的,ListActivity需要构造一个Intent,这个Intent用于告诉系统,我们要做“查看”动作,此动作对应的查看对象是“某联系人”,然后调用startActivity(Intent intent),将构造的Intent传入,系统会根据此Intent中的描述,到AndroidManifest.xml中找到满足此Intent要求的Activity,系统会调用找到的Activity,即为DetailActivity,最终传入Intent,DetailActivity则会根据此Intent中的描述,执行相应的操作。

显示网页
Uri uri
= Uri.parse("http://www.google.com.hk/");
Intent intent
= new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);


显示地图
Uri uri
= Uri.parse("geo:38.899533,-77.036476");
Intent intent
= new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
//其他geo URI范例(latitude: 纬度,longitude: 经度)
//geo:latitude,longitude
//geo:latitude,longitude?z=zoom
//geo:0,0?q=my+street+address
//geo:0,0?q=business+near+city
//google.streetview:cbll=lat,lng&cbp=1,yaw,,pitch,zoom&mz=mapZoom



路径规划
Uri uri
= Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");
Intent intent
= new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
//where startLat, startLng, endLat, endLng are a long with 6 decimals like: 50.123456


打电话
//叫出拨号程序
Uri uri = Uri.parse("tel:0800000123");
Intent intent
= new Intent(Intent.ACTION_DIAL, uri);
startActivity(intent);

//直接打电话出去
Uri uri = Uri.parse("tel:0800000123");
Intent intent
= new Intent(Intent.ACTION_CALL, uri);
startActivity(intent);
//用這個,要在 AndroidManifest.xml 中,加上<uses-permission id="android.permission.CALL_PHONE" />

传送SMS
/MMS
//调用短信程序
Intent it = new Intent(Intent.ACTION_VIEW, uri);
it.putExtra(
"sms_body", "The SMS text");
it.setType(
"vnd.android-dir/mms-sms");
startActivity(it);

//传送消息
Uri uri = Uri.parse("smsto://0800000123");
Intent it
= new Intent(Intent.ACTION_SENDTO, uri);
it.putExtra(
"sms_body", "The SMS text");
startActivity(it);

//传送 MMS
Uri uri = Uri.parse("content://media/external/images/media/23");
Intent it
= new Intent(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
= new Intent(Intent.ACTION_SENDTO, uri);
startActivity(it);

Intent it
= new Intent(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
=new Intent(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 = new Intent(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"));

播放多媒体
Uri uri
= Uri.parse("file:///sdcard/song.mp3");
Intent it
= new Intent(Intent.ACTION_VIEW, uri);
it.setType(
"audio/mp3");
startActivity(it);



Uri uri
= Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
Intent it
= new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);


Market 相关
//寻找某个应用
Uri uri = Uri.parse("market://search?q=pname:pkg_name");
Intent it
= new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
//where pkg_name is the full package path for an application

//显示某个应用的相关信息
Uri uri = Uri.parse("market://details?id=app_id");
Intent it
= new Intent(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

Uninstall 应用程序
Uri uri
= Uri.fromParts("package", strPackageName, null);
Intent it
= new Intent(Intent.ACTION_DELETE, uri);
startActivity(it);
posted on 2011-03-12 10:59  Ruthless  阅读(3745)  评论(0编辑  收藏  举报