工程目录:src\ch09\ch09_custom_action、src\ch09\ch09_client_action 广州网站设计
在4.1.3小节曾介绍了在AndroidManifest.xml文件中为Activity定义Action,但都是在应用程序内部调用,实际上,这些自定义的Action同样可以在其他应用程序中调用。现在我们来看一个实际的例子,其中ch09_custom_action工程中有一个MyActivity,该类的定义代码如下:
广州网站设计
- <activity androidandroid:name=".MyActivity"android:label="MyActivity">
- <intent-filter>
- <!-- 自定义的Action -->
- <action android:name="android.intent.action.MyActivity" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
在ch09_custom_action和ch09_client_action中都可以使用下面的代码来调用MyActivity。
- Intent intent = new Intent("android.intent.action.MyActivity");
- startActivity(intent);
如果我们定义的Action在系统中还有其他的程序也定义了,在使用该Action时就会弹出类似如图9.10所示的选择菜单。例如,我们按照如下的代码来修改MyActivity的定义。
广州网站建设
- <activity android:name=".MyActivity" android:label="MyActivity">
- <intent-filter>
- <action android:name="android.intent.action.MyActivity" />
- <action android:name="android.intent.action.GET_CONTENT" />
- <data android:mimeType="audio/*" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
在上面的代码中为MyActivity添加了一个Action和一个mimeType,首先运行ch09_custom_ action,然后在ch09_client_action中使用如下的代码来调用MyActivity。
- Intent intent = new Intent("android.intent.action.GET_CONTENT");
- intent.putExtra("data", "参数值");
- intent.setType("audio/*");
- startActivity(intent);
现在来运行ch09_client_action,并通过上面的代码来访问MyActivity,会弹出如图9.11所示的3个菜单项。如果在MyActivity类中的onCreate方法中使用下面的代码可以获得由ch09_client_action传递的data参数值。
广州网站建设
- String data = getIntent().getStringExtra("data");
- if (data != null)
- setTitle(data);
![]() |
| 图9.11 拥有音频处理动作的MyActivity |
- Intent intent = new Intent("android.intent.action.MyActivity");
- intent.setType("audio/*");
- startActivity(intent);




