应用程序在调用setComponentEnabledSetting以使用"活动别名"后关闭

rah*_*hul 6 android

在我的应用程序中,我想根据收到的通知更改应用程序的图标.即,如果收到2个通知,则其中具有"2"的app图标将显示在设备的主屏幕中.

为此,我使用了活动别名.我为活动别名添加了以下intent过滤器:

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
Run Code Online (Sandbox Code Playgroud)

为了使活动别名处于活动状态,我使用了以下代码:

这是为了启用活动别名:

 ComponentName componentName = new ComponentName("PACKAGE_NAME_HERE",
                    lastEnabled);
            pm.setComponentEnabledSetting(componentName,
                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                    PackageManager.DONT_KILL_APP);
            Utility.setLastEnabled(lastEnabled,context); 
Run Code Online (Sandbox Code Playgroud)

这将禁用以前启用的活动别名

componentName = new ComponentName(
            "PACKAGE_NAME_HERE", prevLastEnabled);
    pm.setComponentEnabledSetting(componentName,
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
            PackageManager.DONT_KILL_APP);
Run Code Online (Sandbox Code Playgroud)

但是,只要应用程序图标发生变化,我的应用就会毫无例外地关闭.我在这里使用过不要杀app,仍然会关闭应用程序.如果我做错了什么,有人可以建议我.谢谢.

Dat*_*ino 4

您的活动正在关闭,可能是因为您启用/禁用了目标活动。注意App(应用程序进程)并没有被杀死。无论如何,这就是我为阻止活动关闭所做的事情:

一般来说,您需要执行以下操作:

  1. 仅使用图标的活动别名
  2. 从目标 Activity 中删除“启动器”类别
  3. 仅启用/禁用活动别名

您的 AndroidManifest.xml 应如下所示:

<activity android:name=".MainActivity" ... >
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
  </intent-filter>
</activity>

<activity-alias android:name=".No-Icon-Badge"
                android:targetActivity=".MainActivity"
                android:enabled="true" 
                ... >
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity-alias>

<activity-alias android:name=".Icon-Badge-1"
                android:targetActivity=".MainActivity"
                android:enabled="false" 
                ... >
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity-alias>

<activity-alias android:name=".Icon-Badge-2"
                android:targetActivity=".MainActivity"
                android:enabled="false"
                ... >
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity-alias>

...
Run Code Online (Sandbox Code Playgroud)

因此,您的 MainActivity 已启用(保持这种状态),但没有 LAUNCHER 类别,因此它不会显示。此外,第一个活动别名已启用(这是默认设置),所有其他活动别名均已禁用。

祝你好运!

  • 您的建议对我的情况不起作用,但给了我一个想法 - 当我的活动显示时,我不会调用禁用活动别名,但在完成()编辑后。这为我解决了这个问题 (2认同)