Android Intent全面解析:启动Activity与BroadcastReceiver

需积分: 50 3 下载量 108 浏览量 更新于2024-09-15 1 收藏 54KB DOC 举报
"这篇文章主要介绍了Intent在Android系统中的多种使用方法,包括从BroadcastReceiver启动Activity、指定Intent的action、type以及隐式启动等。" 在Android开发中,Intent是一个非常关键的组件,它用于在应用程序的不同组件之间传递信息,如启动Activity、启动Service或者发送Broadcast。以下是关于Intent的一些常用方法和应用场景: 1. 从BroadcastReceiver启动Activity 当你需要在BroadcastReceiver接收到广播后启动一个新的Activity时,需要确保设置`Intent.FLAG_ACTIVITY_NEW_TASK`标志。这是因为BroadcastReceiver通常运行在后台进程中,而启动Activity需要一个任务栈。例如: ```java public class MyReceiver extends BroadcastReceiver { public static final String ACTION = "acc"; public void onReceive(Context context, Intent intent) { Intent i = new Intent(context, Receivered.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } } ``` 2. 指定action和type 当你想启动一个特定的Activity,可以通过指定Intent的action和type来实现。比如,这里使用`Intent.ACTION_VIEW`和特定的MIME类型`"vnd.android.cursor.item/sim-contact"`来启动SIM联系人查看器: ```java Intent importIntent = new Intent(Intent.ACTION_VIEW); importIntent.setType("vnd.android.cursor.item/sim-contact"); importIntent.setClassName("com.android.phone", "com.android.phone.SimContacts"); ``` 3. 指定action、data和type 对于隐式启动Activity,除了action,我们还可以提供URI数据(data)和MIME类型(type)。例如,通过URI `content://simcontacts/simPeople/(id)` 来启动SIM编辑器: ```java Uri uri = Uri.parse("content://simcontacts/simPeople/" + id); Intent intent = new Intent("android.intent.action.SIMEDIT", uri); startActivity(intent); ``` 这时,系统会根据data中的URI和type去匹配AndroidManifest.xml中声明的Activity。 4. AndroidManifest.xml中的过滤器(filter设定) 在接收隐式Intent时,需要在AndroidManifest.xml中设置对应的Intent过滤器,以便系统能够找到合适的Activity来处理Intent。例如: ```xml <activity android:name=".MyActivity"> <intent-filter> <action android:name="android.intent.action.SIMEDIT" /> <data android:scheme="content" android:pathPattern="simcontacts/simPeople/*" /> <data android:mimeType="vnd.android.cursor.item/sim-contact" /> </intent-filter> </activity> ``` 这样,当Intent的action是`"android.intent.action.SIMEDIT"`,data匹配`"content://simcontacts/simPeople/*"`,并且type为`"vnd.android.cursor.item/sim-contact"`时,系统就会选择这个Activity进行启动。 理解并熟练运用这些Intent的用法,对于构建Android应用至关重要,因为它允许开发者在应用组件之间灵活地传递数据和触发操作。无论是启动Activity、Service还是BroadcastReceiver,Intent都是连接这些组件的关键桥梁。