Android 应用程序在 Intent 启动时被杀死
Android App Getting Killed on Intent Launch
我有一个对启动器隐藏的应用程序。现在我想从拨号器打开应用程序。所以我有一个 BroadcastReceiver 来处理事情。
1) 首先我展示了应用程序,
ComponentName componentName = new ComponentName(context,
SplashActivity.class);
context.getPackageManager().setComponentEnabledSetting(
componentName,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
2) 然后启动一个Intent,
Intent launcher = new Intent(context, SplashActivity.class);
launcher.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(launcher);
3)那我又把应用隐藏了,
ComponentName componentName2 = new ComponentName(context,
SplashActivity.class);
context.getPackageManager().setComponentEnabledSetting(
componentName2,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
问题
Intent 启动成功,但应用程序在几秒钟后被终止。但是,如果我启动 SplashActivity 以外的任何其他 activity,则不会出现此问题。问题是什么,如何解决?
您可以在启动器 activity 的 Android 清单中使用 <activity-alias>
标签。更改启动器 activity 的清单,如下所示:-
<activity-alias
android:name="com.watever.SplashActivityAlias"
android:targetActivity="com.watever.SplashActivity"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.MONKEY" />
</intent-filter>
</activity-alias>
在显示和隐藏应用程序的代码中,只需使用清单中使用的别名,如上面的清单别名是 SplashActivityAlias,因此在显示和隐藏应用程序的两种情况下都使用 SplashActivityAlias 而不是 SplashActivity。
通过做上面的事情,你可以隐藏你的应用程序图标
使用别名的 setComponent EnabledSetting 方法,您可以使用 dialer
启动主程序 activity,它是 splash activity
For hiding app
ComponentName componentName2 = new ComponentName("com.packagename",
"com.packagename.HideAppActivity");
context.getPackageManager().setComponentEnabledSetting(
componentName2,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
我有一个对启动器隐藏的应用程序。现在我想从拨号器打开应用程序。所以我有一个 BroadcastReceiver 来处理事情。
1) 首先我展示了应用程序,
ComponentName componentName = new ComponentName(context,
SplashActivity.class);
context.getPackageManager().setComponentEnabledSetting(
componentName,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
2) 然后启动一个Intent,
Intent launcher = new Intent(context, SplashActivity.class);
launcher.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(launcher);
3)那我又把应用隐藏了,
ComponentName componentName2 = new ComponentName(context,
SplashActivity.class);
context.getPackageManager().setComponentEnabledSetting(
componentName2,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
问题
Intent 启动成功,但应用程序在几秒钟后被终止。但是,如果我启动 SplashActivity 以外的任何其他 activity,则不会出现此问题。问题是什么,如何解决?
您可以在启动器 activity 的 Android 清单中使用 <activity-alias>
标签。更改启动器 activity 的清单,如下所示:-
<activity-alias
android:name="com.watever.SplashActivityAlias"
android:targetActivity="com.watever.SplashActivity"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.MONKEY" />
</intent-filter>
</activity-alias>
在显示和隐藏应用程序的代码中,只需使用清单中使用的别名,如上面的清单别名是 SplashActivityAlias,因此在显示和隐藏应用程序的两种情况下都使用 SplashActivityAlias 而不是 SplashActivity。 通过做上面的事情,你可以隐藏你的应用程序图标 使用别名的 setComponent EnabledSetting 方法,您可以使用 dialer
启动主程序 activity,它是 splash activityFor hiding app
ComponentName componentName2 = new ComponentName("com.packagename",
"com.packagename.HideAppActivity");
context.getPackageManager().setComponentEnabledSetting(
componentName2,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);