如何导出活动,以便其他应用程序可以调用它?

For*_*rce 13 android sharing android-activity

我搜索了很多,但我没有找到如何导出活动的精确答案,因此应用程序可以启动它startActivityforResult.

我如何实现这一目标?我是否必须在某些方面更改清单?

Ton*_*han 23

作为Dalmas回答的替代方案,您实际上可以导出一个Activity而不创建<intent-filter>(以及提出自定义操作的麻烦).

Manifest编辑你的Activity标签时如下:

<activity
    android:name=".SomeActivity"
    ....
    android:exported="true" />
Run Code Online (Sandbox Code Playgroud)

重要的是android:exported="true",此export标记确定"活动是否可以由其他应用程序的组件启动".如果你<activity>包含a <intent-filter>那么这个标签被设置为true自动,如果没有,则false默认设置为.

然后启动Activity这样做:

Intent i = new Intent();
i.setComponent(new ComponentName("package name", "fully-qualified name of activity"));
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

当然,使用此方法,您需要知道要尝试启动的活动的确切名称.


Dal*_*mas 14

您需要在Manifest中声明一个intent-filter(我从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>
Run Code Online (Sandbox Code Playgroud)

然后使用相同的操作字符串创建一个intent:

Intent intent = new Intent("com.google.zxing.client.android.SCAN");
startActivityForResult(intent, code);
Run Code Online (Sandbox Code Playgroud)

Android应该开始您的活动(如果有多个应用程序共享相同的操作字符串,它将显示一个下拉框).