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

时间:2015-02-10 16:07:37

标签: android

在我的应用中,我想根据收到的通知更改应用的图标。即如果收到2个通知,则其中包含“2”的应用程序图标将显示在设备的主屏幕中。

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

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

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

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

这是为了启用活动别名:

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

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

componentName = new ComponentName(
            "PACKAGE_NAME_HERE", prevLastEnabled);
    pm.setComponentEnabledSetting(componentName,
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
            PackageManager.DONT_KILL_APP);

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

1 个答案:

答案 0 :(得分:1)

您的活动正在关闭可能是因为您启用/禁用了目标活动。请注意,应用程序(应用程序进程)尚未被杀死。无论如何,这是我阻止活动关闭的原因:

通常,您希望执行以下操作:

  1. 仅使用活动别名图标
  2. 删除类别&#34;启动器&#34;来自目标活动
  3. 仅启用/禁用活动别名
  4. 您的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>
    
    ...
    

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

    祝你好运!