1

我有一个应用程序,使用broadcast receiver. 我使用这种方法将其从应用程序抽屉中隐藏起来:

public static void hideFromAppDrawer(Context c) {
        ComponentName componentToDisable = new ComponentName(
                "mypackage", "mypackage.MyMainActivity");

        c.getPackageManager().setComponentEnabledSetting(componentToDisable,
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);
    }

但是在隐藏之后(我隐藏了 laucher 活动,之后我想远程启动相同的活动)应用程序无法启动。日志说:

03-27 15:00:53.494: E/AndroidRuntime(23392): FATAL EXCEPTION: main
03-27 15:00:53.494: E/AndroidRuntime(23392): java.lang.RuntimeException: Unable to start receiver mypackage.receivers.myReceiver: android.content.ActivityNotFoundException: Unable to find explicit activity class {mypackage/mypackage.MyMainActivity}; have you declared this activity in your AndroidManifest.xml?
03-27 15:00:53.494: E/AndroidRuntime(23392):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2383)

broadcast receiver's onReceive()当我尝试启动活动时,错误出现在方法中:

context.startActivity(i);

03-27 15:00:53.494: E/AndroidRuntime(23392):    at ... .onReceive(MyReceiver.java:36)

可能是什么问题?如何在应用程序抽屉隐藏时启动我的应用程序?

4

1 回答 1

5

可能是什么问题呢

您禁用了该组件,这意味着它无法启动。

如何在应用程序抽屉隐藏时启动我的应用程序?

你可以试试这个:

  • 设置一个<activity-alias>清单条目,指向您的活动,其中包含您的MAIN/ LAUNCHER <intent-filter>(从原始过滤器中删除<activity>

  • 禁用<activity-alias>使用上面的 Java 代码,保持原始活动不变

  • 确保您BroadcastReceiver引用该活动,因为它应该已经

原则上,这应该可行,尽管我没有尝试过这个特定的食谱。

于 2013-03-27T14:36:54.103 回答