【问题标题】:Android - can't start activity of a library projectAndroid - 无法启动库项目的活动
【发布时间】:2017-03-29 07:00:10
【问题描述】:

我正在开发一个库。我希望使用我的库的应用程序应该能够使用我的自定义操作通过隐式意图启动我的主要活动。但是自定义意图不起作用。它说“没有发现任何活动来处理带有 action = 'my custom action' 的意图”。下面是我的代码:

Intent intent = new Intent();
intent.setAction("my.custom.action");
intent.addCategory("android.intent.category.DEFAULT");
intent.putExtra("foo","bar");
startActivity(intent);

我也尝试过使用包名来获取意图,但它也不起作用(虽然我不想使用这种方法,因为我不想公开我的包名和组件)

Intent intent = getPackageManager().getLaunchIntentForPackage("com.happay.android.acslibrary");

最后我尝试使用显式意图:

Intent intent = new Intent(this,LibMainActivity.class);
startActivity(intent);

这没有引发异常,但没有打开我的图书馆活动。它刚刚从我的主项目中打开了相同的活动。 这是我注册活动的图书馆项目清单:

<activity android:name=".LibMainActivity">
        <intent-filter>
            <action android:name="my.custom.action" />

            <category android:name="android.intent.category.DEFAULT" />

        </intent-filter>
    </activity>

我做错了什么?

【问题讨论】:

    标签: android android-intent android-manifest intentfilter


    【解决方案1】:

    从您传递给startActivity()Intent 中删除类别。您将类别LAUNCHER 添加到Intent,但您的&lt;intent-filter&gt; 仅包含类别DEFAULT。没有比赛。根据documentation for matching Intents

    如果 Intent 中的所有类别都匹配,则类别匹配 过滤器中给出的类别。过滤器中的额外类别 不在 Intent 中不会导致匹配失败。注意 与动作不同,没有类别的 IntentFilter 只会匹配 没有任何类别的 Intent。

    【讨论】:

    • 这是发布问题时的错误。在代码中我使用相同的类别。我已经编辑了问题。
    • 在文档中也写了如果注册时没有使用类别,则不应使用任何类别。但是没有类别应用程序崩溃。再次启动相同类别的相同调用活动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    相关资源
    最近更新 更多