android 8.0及以上与8.0以下创建快捷方式问题记录

最近遇到需要创建快捷方式的业务,于是开发后发现了一个问题,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"/>

该方法在华为手机上可用,其他手机未试。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值