最近遇到需要创建快捷方式的业务,于是开发后发现了一个问题,8.0和8.0以下时创建快捷方式有时不成功,原先我是这样写的:
1、在添加快捷方式需要的权限:
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
2、创建快捷方式8.0及以上:
ShortcutManager shortcutManager = (ShortcutManager) context.getSystemService(Context.SHORTCUT_SERVICE);
if (shortcutManager != null && shortcutManager.isRequestPinShortcutSupported()) {
Intent intent = new Intent();
intent.setClass(context, UserDetailsActivity.class);
intent.setAction(Intent.ACTION_CREATE_SHORTCUT);
intent.putExtra("sellerId",sellerId);
intent.putExtra("duplicate", false);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ShortcutInfo.Builder builder = new ShortcutInfo.Builder(context, sellerId)
.setShortLabel(name)
.setIcon(Icon.createWithBitmap(icon))
.setIntent(intent);
shortcutManager.requestPinShortcut(builder.build(),null);
}
3、创建快捷方式8.0以下,需要用到广播机制:
Intent intent = new Intent(ACTION_ADD_SHORTCUT);
// 是否允许重复创建
intent.putExtra("duplicate", false);
// 快捷方式的标题
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);
// 快捷方式的图标
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon);
Intent launcherIntent = new Intent();
launcherIntent.setClass(App.getApp().getContext(), UserDetailsActivity.class);
launcherIntent.putExtra("sellerId", sellerId);
launcherIntent.setAction(Intent.ACTION_CREATE_SHORTCUT);
launcherIntent.addCategory(Intent.CATEGORY_LAUNCHER);
// 快捷方式的动作
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launcherIntent);
context.sendBroadcast(intent);
写完后在oppo手机,Android 8.0版本以下测试,发现可以创建,但是在HUAWEI 8.0以上确无反应,于是找了很多资料,说是8.0后需要的权限是:
<uses-permission android:name="android.permission.INSTALL_SHORTCUT" />
将权限修改后又试了下,发现8.0以下又无法创建了,于是我同时加上两个权限,发现还是不行,果然坑好多,试了很多次后,发现com.android.launcher.permission.INSTALL_SHORTCUT和android.permission.INSTALL_SHORTCUT同时存在时,例如:
<uses-permission android:name="android.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
android.permission.INSTALL_SHORTCUT添加在前面,则com.android.launcher.permission.INSTALL_SHORTCUT没有效果,8.0以下无法创建快捷方式。
如果com.android.launcher.permission.INSTALL_SHORTCUT添加在前面:
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
<uses-permission android:name="android.permission.INSTALL_SHORTCUT" />
则android.permission.INSTALL_SHORTCUT没有效果,8.0及以上又无法创建。
最后查了很多方法,发现在:
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
中添加 这句 android:maxSdkVersion=“25” 即可,这样就避免的两个权限的冲突。
完整代码:
<!-- 添加快捷方式8.0及以上 -->
<uses-permission android:name="android.permission.INSTALL_SHORTCUT" />
<!-- 添加快捷方式8.0以下 必须加maxSdkVersion,否则不生效-->
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"
android:maxSdkVersion="25"/>
该方法在华为手机上可用,其他手机未试。