1.intent 6 items
action, data(uri &type),Component name,Extras,flags
2.data---uri & type
不管使用什么参数,action,type或者其他,关键问题就是。
所有的new activity启动,最终都需要Component name.
所以,intent可以分析得到Component name,就可以使用。
private void sendBroadcast(long eventId, long begin, long end, String title){ Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon(); builder.appendEncodedPath("events/" + eventId); Uri uri = builder.build(); Intent i = new Intent(EVENT_DETAIL_ACTION); i.putExtra(EXTRA_EVENT_BEGIN_TIME, begin); i.putExtra(EXTRA_EVENT_END_TIME, end); i.putExtra(TITLE, title); // i.setDataAndType(uri, EXTRA_TYPE); i.setData(uri); if (i.resolveActivity(getPackageManager()) != null) { startActivity(i); } }
关于传递data的问题。一般情况下,uri和type只需要一个。
关键是,我们每个activtiy最好是指定处理的类型,当我们需要做隐示intent传递的时候。
<activity android:name=".agenda.AgendaDetailActivity" > <intent-filter> <action android:name="com.xui.calendar.agenda_detail"></action> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="vnd.android.cursor.item/event"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="vnd.android.cursor.item/event"/> </intent-filter> </activity>
但是我们可能只想传奇Uri给activtiy使用,这个时候,使用content类型的uri可以保证具有唯一性。
因为每个uri对应数据库,而数据库是有类型的。content_item_type.
进而ams可以通过数据库的类型进行匹配。
所以可以只传递uri的情况。
如果想同时传递uri & type。setdataandtype。
时间: 2024-10-08 23:08:03