在一个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中的描述,执行相应的操作。

[quote]显示网页

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);[/quote]