【问题标题】:How to export an activity so other apps can call it?如何导出活动以便其他应用程序可以调用它?
【发布时间】:2011-11-16 10:19:18
【问题描述】:

好吧,我搜索了很多,但我没有找到如何导出 Activity 的准确答案,因此应用可以使用 startActivityforResult 启动它。

我如何做到这一点?我是否必须以某种方式更改清单?

【问题讨论】:

    标签: android android-activity sharing


    【解决方案1】:

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

    Manifest 中编辑您的Activity 标签,如下所示:

    <activity
        android:name=".SomeActivity"
        ....
        android:exported="true" />
    

    重要的部分是android:exported="true",这个export标签决定了“Activity是否可以被其他应用程序的组件启动”。如果您的&lt;activity&gt; 包含&lt;intent-filter&gt;,则此标签会自动设置为true,否则默认设置为false

    然后启动Activity 这样做:

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

    当然,使用这种方法,您需要知道要启动的 Activity 的确切名称。

    【讨论】:

    • 非常感谢!即使在进行了无关紧要的更改之后,即使在我删除了该更改之后,我的应用程序也突然开始抛出此错误,但这解决了这个问题!
    • 关于默认行为的非常好的规范。一个外部应用程序说我的应用程序的主要活动已导出,我不明白为什么,直到我读到你的答案......祝你有美好的一天!
    【解决方案2】:

    您需要在 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 应该启动您的活动(如果有多个应用共享相同的操作字符串,它将显示一个下拉框)。

    【讨论】:

    • 谢谢,我刚刚通读了 Barcodescanner Manifest 并发现了同样的问题。 :]
    猜你喜欢
    • 1970-01-01
    • 2016-05-31
    • 2017-09-09
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多