在一个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);