我搜索了很多,但是我没有找到如何导出活动的准确答案,因此应用可以使用startActivityforResult
启动它。
我如何实现这一目标?我是否必须在某些方面更改清单?
答案 0 :(得分:23)
作为Dalmas答案的替代方案,您实际上可以导出Activity
而无需创建<intent-filter>
(以及提出自定义操作的麻烦)。
在Manifest
编辑您的Activity
标记,如下所示:
<activity
android:name=".SomeActivity"
....
android:exported="true" />
重要的部分是 android:exported="true"
,此export
标记确定“活动是否可以由其他应用程序的组件启动”。如果您的<activity>
包含<intent-filter>
,则此标记会自动设置为true
,如果不是,则默认设置为false
。
然后启动Activity
执行此操作:
Intent i = new Intent();
i.setComponent(new ComponentName("package name", "fully-qualified name of activity"));
startActivity(i);
当然,使用此方法,您需要知道要尝试启动的活动的确切名称。
答案 1 :(得分:14)
您需要在Manifest中声明一个intent-filter(我从条形码扫描器中获取了以下示例):
<activity android:name="...">
<intent-filter>
<action android:name="com.google.zxing.client.android.SCAN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
然后使用相同的操作字符串创建一个intent:
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
startActivityForResult(intent, code);
Android应该开始您的活动(如果有多个应用共享相同的操作字符串,它会显示一个下拉框。)