【发布时间】:2011-11-16 10:19:18
【问题描述】:
好吧,我搜索了很多,但我没有找到如何导出 Activity 的准确答案,因此应用可以使用 startActivityforResult 启动它。
我如何做到这一点?我是否必须以某种方式更改清单?
【问题讨论】:
标签: android android-activity sharing
好吧,我搜索了很多,但我没有找到如何导出 Activity 的准确答案,因此应用可以使用 startActivityforResult 启动它。
我如何做到这一点?我是否必须以某种方式更改清单?
【问题讨论】:
标签: android android-activity sharing
作为 Dalmas 答案的替代方案,您实际上可以导出 Activity 而无需创建 <intent-filter>(以及提出自定义操作的麻烦)。
在Manifest 中编辑您的Activity 标签,如下所示:
<activity
android:name=".SomeActivity"
....
android:exported="true" />
重要的部分是android:exported="true",这个export标签决定了“Activity是否可以被其他应用程序的组件启动”。如果您的<activity> 包含<intent-filter>,则此标签会自动设置为true,否则默认设置为false。
然后启动Activity 这样做:
Intent i = new Intent();
i.setComponent(new ComponentName("package name", "fully-qualified name of activity"));
startActivity(i);
当然,使用这种方法,您需要知道要启动的 Activity 的确切名称。
【讨论】:
您需要在 Manifest 中声明一个意图过滤器(我从 Barcode Scanner 中获取了以下示例):
<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 = new Intent("com.google.zxing.client.android.SCAN");
startActivityForResult(intent, code);
Android 应该启动您的活动(如果有多个应用共享相同的操作字符串,它将显示一个下拉框)。
【讨论】: