安卓app如何在安装时创建快捷方式

1:首先声明权限:

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
2:在启动页里面的onCreate方法(或其他合适的方法)中执行如下方法:

public void initShortCut() {
    // intent发送隐式意图,去创建快捷方式
    Intent addIntent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
    //不让重建
    addIntent.putExtra("duplicate", false);
    // 将应用的图标设置为Parceable类型
    Parcelable icon = Intent.ShortcutIconResource.fromContext(this, R.mipmap.icon_release);
    // 点击图标之后的意图操作
    Intent myIntent = new Intent(Intent.ACTION_MAIN);
    myIntent.setClassName(this, getClass().getName());
    // 设置快捷方式的名称
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "百度影音");
    // 设置快捷方式的图标
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);
    // 设置快捷方式的意图
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, myIntent);
    // 发送广播
    sendBroadcast(addIntent);
}
3:但是上面的走完之后还有瑕疵就是每次点击快捷键进入都会发送创建快捷键的意图,虽然设置了不要重复创建,但是每次都弹出来已经创建过了的信息也是蛮让人不爽的,所以需要在发送意图前判断是否已经创建过图标了:

3.1:声明权限:

<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
3.2方法:
//判断是否创建过了快捷方式
public static boolean isAddShortCut(Context context) {
    boolean isInstallShortcut = false;
    ContentResolver cr = context.getContentResolver();
    String AUTHORITY = getAuthorityFromPermission(context, "com.android.launcher.permission.READ_SETTINGS");
    final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/favorites?notify=true");

    Cursor c = cr.query(CONTENT_URI, new String[]{"title"}, "title=?", new String[]{context.getString(R.string.app_name)}, null);

    if (c != null && c.getCount() > 0) {
        isInstallShortcut = true;
    }

    if (c != null) {
        c.close();
    }
    return isInstallShortcut;
}

public static String getAuthorityFromPermission(Context context, String permission) {
    if (TextUtils.isEmpty(permission)) {
        return null;
    }
    List<PackageInfo> packInfos = context.getPackageManager().getInstalledPackages(GET_PROVIDERS);
    if (packInfos == null) {
        return null;
    }
    for (PackageInfo info : packInfos) {
        ProviderInfo[] providers = info.providers;
        if (providers != null) {
            for (ProviderInfo provider : providers) {
                if (permission.equals(provider.readPermission) || permission.equals(provider.writePermission)) {
                    return provider.authority;
                }
            }
        }
    }
    return null;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值