3

我愿意通过以下代码从另一个活动中禁用一个活动,但这会导致一个问题:杀死当前应用程序。SDK 版本为 4.0 。

 @Override
 public void onCreate(Bundle savedInstanceState) {  
     PackageManager pm = getPackageManager();

     pm.setComponentEnabledSetting(newComponentName(this,
                                    "com.xxx.launcher.desktop.testActivity"),
                                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,   
                                    PackageManager.DONT_KILL_APP);

}

是不是缺少某物?

4

2 回答 2

5

你应该看看http://developer.android.com/reference/android/content/pm/PackageManager.html#DONT_KILL_APP

使用时必须小心PackageManager.DONT_KILL_APP,因为它可能导致未定义的行为。特别是如果活动试图禁用自身。如果您针对另一个活动应该没问题,但我猜您要清除的活动在

看来您的呼叫ComponentName不正确。你可能会想打电话new ComponentName(this.getApplicationContext(), testActivity.class)。或者您可以使用new ComponentName("com.xxx.launcher.desktop","com.xxx.launcher.desktop.testActivity"),其中第一个参数是 AndroidManifest.xml 文件中的包,第二个参数是ComponentName. 请查看以下 SO 问题以获取有关设置 ComponentName 的信息:When to use which constructor for ComponentName in Android? 了解更多信息。

于 2013-05-07T01:52:19.990 回答
0

我和OP有同样的问题。

我注意到,在 Android Studio 的Run窗口顶部,它并没有尝试启动我的默认启动器活动SplashActivity,而是我的应用程序中的另一个启动器活动:

Launching 'app' on samsung SM-J320FN.
$ adb shell am start -n "com.example/com.example.NotMyDefaultLauncherActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER

我的应用程序后来尝试禁用NotMyDefaultLauncherActivity时毫不客气地退出(通过packageManager.setComponentEnabledSetting(...).

我的解决方案是进入Run > Edit Configurations... > Android App > app,在那里我将启动活动从DefaultActivity更改为(应该是默认值,因为它是我清单中列出的第一个)com.example.SplashActivity

于 2020-06-24T20:57:51.490 回答