需求描述
创建一个快捷方式,通过快捷方式启动一个完全独立的Activity。(注意,当应用在后台运行时,启动该Activity时不要将应用程序唤醒)
创建快捷方式
private void createShortCut(){
Intent shortcutIntent = new Intent();
//设置点击快捷方式时启动的Activity,因为是从Lanucher中启动,所以包名类名要写全。
shortcutIntent.setComponent(new ComponentName("com.test", "com.test.SecondActivity"));
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS|Intent.FLAG_ACTIVITY_NEW_TASK);
Intent resultIntent = new Intent();
//设置快捷方式图标
resultIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
Intent.ShortcutIconResource.fromContext(this,
R.drawable.ic_launcher));
//启动的Intent
resultIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
//设置快捷方式的名称
resultIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME,
getString(R.string.app_name));
resultIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
sendBroadcast(resultIntent);
}
AndroidManifest文件配置
在Activity标签里加上这一段代码,用于外部启动
<activity
android:name="com.test.SecondActivity"
android:excludeFromRecents="true"
android:launchMode="singleInstance">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
注意事项
包名和类名不要写错,如果gradle里把包名改变了,要写成gradle里的包名(也就是那个applicationId)。
android:excludeFromRecents=”true” android:launchMode=”singleInstance”这两个属性一定要加,不然Activity不是独立的,可以通过带有透明效果的Activity去测试(如果不设置,程序已经在后台运行时,Activity启动起来时会把应用唤醒)。android:exported属性不要设置,或者设置成true,这个属性用于指示该服务是否能够被其他应用程序组件调用或跟它交互,如果设置为true,则能够被调用或交互,否则不能。