前两天做了个应用,需要实时获取桌面快捷方式是否存在,在某些第三方ROM下无法获取。

网上大量的例子都是谷歌原生系统或者小米、三星这类系统起作用,但是对于第三方ROM无法获取如:HTC、华为、一加、联想。

为什么不可以,试过的同学应该都知道,我这里就不一一解答,直接贴正确代码:

import java.util.List;import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
import android.database.Cursor;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;public class launcherUtil {private static String AUTHORITY = null;public static boolean isShortCutExist(Context context, String title) {boolean isInstallShortcut = false;if (null == context || TextUtils.isEmpty(title))return isInstallShortcut;if (TextUtils.isEmpty(AUTHORITY))AUTHORITY = getAuthorityFromPermission(context);final ContentResolver cr = context.getContentResolver();if (!TextUtils.isEmpty(AUTHORITY)) {try {final Uri CONTENT_URI = Uri.parse(AUTHORITY);Cursor c = cr.query(CONTENT_URI, new String[] { "title","iconResource" }, "title=?", new String[] { title },null);// XXX表示应用名称。if (c != null && c.getCount() > 0) {isInstallShortcut = true;}if (null != c && !c.isClosed())c.close();} catch (Exception e) {// TODO: handle exceptionLog.e("isShortCutExist", e.getMessage());}}return isInstallShortcut;}public static String getCurrentLauncherPackageName(Context context) {Intent intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_HOME);ResolveInfo res = context.getPackageManager().resolveActivity(intent, 0);if (res == null || res.activityInfo == null) {// should not happen. A home is always installed, isn't it?return "";}if (res.activityInfo.packageName.equals("android")) {return "";} else {return res.activityInfo.packageName;}}public static String getAuthorityFromPermissionDefault(Context context) {return getThirdAuthorityFromPermission(context,"com.android.launcher.permission.READ_SETTINGS");}public static String getThirdAuthorityFromPermission(Context context,String permission) {if (TextUtils.isEmpty(permission)) {return "";}try {List<PackageInfo> packs = context.getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS);if (packs == null) {return "";}for (PackageInfo pack : packs) {ProviderInfo[] providers = pack.providers;if (providers != null) {for (ProviderInfo provider : providers) {if (permission.equals(provider.readPermission)|| permission.equals(provider.writePermission)) {String authority = provider.authority;if (!StringUtils.isBlank(authority)&& (authority.contains(".launcher.settings")|| authority.contains(".twlauncher.settings") || authority.contains(".launcher2.settings")))return authority;}}}}} catch (Exception e) {e.printStackTrace();}return "";}public static String getAuthorityFromPermission(Context context) {// 获取默认String authority = getAuthorityFromPermissionDefault(context);// 获取特殊第三方if (authority == null || authority.trim().equals("")) {String packageName = getCurrentLauncherPackageName(context);packageName += ".permission.READ_SETTINGS";authority = getThirdAuthorityFromPermission(context, packageName);}// 还是获取不到,直接写死if (TextUtils.isEmpty(authority)) {int sdkInt = android.os.Build.VERSION.SDK_INT;if (sdkInt < 8) { // Android 2.1.x(API 7)以及以下的authority = "com.android.launcher.settings";} else if (sdkInt < 19) {// Android 4.4以下authority = "com.android.launcher2.settings";} else {// 4.4以及以上authority = "com.android.launcher3.settings";}}authority = "content://" + authority + "/favorites?notify=true";return authority;}
}

最后别忘了XML里添加所有权限

<!-- 快捷方式相关 --><uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /><uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS" /><uses-permission android:name="com.android.launcher2.permission.READ_SETTINGS" /><uses-permission android:name="com.android.launcher2.permission.WRITE_SETTINGS" /><uses-permission android:name="com.android.launcher3.permission.READ_SETTINGS" /><uses-permission android:name="com.android.launcher3.permission.WRITE_SETTINGS" /><uses-permission android:name="org.adw.launcher.permission.READ_SETTINGS" /><uses-permission android:name="org.adw.launcher.permission.WRITE_SETTINGS" /><uses-permission android:name="com.htc.launcher.permission.READ_SETTINGS" /><uses-permission android:name="com.htc.launcher.permission.WRITE_SETTINGS" /><uses-permission android:name="com.qihoo360.launcher.permission.READ_SETTINGS" /><uses-permission android:name="com.qihoo360.launcher.permission.WRITE_SETTINGS" /><uses-permission android:name="com.lge.launcher.permission.READ_SETTINGS" /><uses-permission android:name="com.lge.launcher.permission.WRITE_SETTINGS" /><uses-permission android:name="net.qihoo.launcher.permission.READ_SETTINGS" /><uses-permission android:name="net.qihoo.launcher.permission.WRITE_SETTINGS" /><uses-permission android:name="org.adwfreak.launcher.permission.READ_SETTINGS" /><uses-permission android:name="org.adwfreak.launcher.permission.WRITE_SETTINGS" /><uses-permission android:name="org.adw.launcher_donut.permission.READ_SETTINGS" /><uses-permission android:name="org.adw.launcher_donut.permission.WRITE_SETTINGS" /><uses-permission android:name="com.huawei.launcher3.permission.READ_SETTINGS" /><uses-permission android:name="com.huawei.launcher3.permission.WRITE_SETTINGS" /><uses-permission android:name="com.fede.launcher.permission.READ_SETTINGS" /><uses-permission android:name="com.fede.launcher.permission.WRITE_SETTINGS" /><uses-permission android:name="com.sec.android.app.twlauncher.settings.READ_SETTINGS" /><uses-permission android:name="com.sec.android.app.twlauncher.settings.WRITE_SETTINGS" /><uses-permission android:name="com.anddoes.launcher.permission.READ_SETTINGS" /><uses-permission android:name="com.anddoes.launcher.permission.WRITE_SETTINGS" /><uses-permission android:name="com.tencent.qqlauncher.permission.READ_SETTINGS" /><uses-permission android:name="com.tencent.qqlauncher.permission.WRITE_SETTINGS" /><uses-permission android:name="com.huawei.launcher2.permission.READ_SETTINGS" /><uses-permission android:name="com.huawei.launcher2.permission.WRITE_SETTINGS" /><uses-permission android:name="com.android.mylauncher.permission.READ_SETTINGS" /><uses-permission android:name="com.android.mylauncher.permission.WRITE_SETTINGS" /><uses-permission android:name="com.ebproductions.android.launcher.permission.READ_SETTINGS" /><uses-permission android:name="com.ebproductions.android.launcher.permission.WRITE_SETTINGS" /><uses-permission android:name="com.oppo.launcher.permission.READ_SETTINGS" /><uses-permission android:name="com.oppo.launcher.permission.WRITE_SETTINGS" /><uses-permission android:name="com.lenovo.launcher.permission.READ_SETTINGS" /><uses-permission android:name="com.lenovo.launcher.permission.WRITE_SETTINGS" /><uses-permission android:name="com.huawei.android.launcher.permission.READ_SETTINGS" /><uses-permission android:name="com.huawei.android.launcher.permission.WRITE_SETTINGS" /><uses-permission android:name="telecom.mdesk.permission.READ_SETTINGS" /><uses-permission android:name="telecom.mdesk.permission.WRITE_SETTINGS" /><uses-permission android:name="dianxin.permission.ACCESS_LAUNCHER_DATA" />
<uses-permission android:name="com.google.android.launcher.permission.READ_SETTINGS" /><uses-permission android:name="com.google.android.launcher.permission.WRITE_SETTINGS" />

Android判断桌面快捷方式是否存在相关推荐

  1. Android创建桌面快捷方式所遇到的问题与解决方案

    将近二个多月没写博客了.      之前一段时间一直在搞红包助手,就没抽时间写博客,但写这个真的是很好玩.没想到居然在Android上实现模拟点击,从而实现自动抢红包,有兴趣的同学可以参考https: ...

  2. android launcher3桌面快捷方式分析

    背景 一般情况下,为了让用户更方便的打开应用,程序会在桌面上生成一些快捷方式. 本来呢,如果是原生的桌面,其实是十分简单,直接调用系统相关的API就行了.但是众多的系统厂商以及众多第三方自己定制的桌面 ...

  3. android 4.2 桌面快捷方式,Android 添加桌面快捷方式操做

    /** android * 为程序建立桌面快捷方式 app */ ide private void addShortcut(){ this Intent shortcut = new Intent(& ...

  4. android 启动桌面快捷方式,安卓桌面快捷方式传递启动参数

    应用里需要根据不同的主题在安卓桌面创建快捷方式.快捷方式可以创建成功,并添加了参数.如下: function createShortcut(){ // 创建快捷方式意图 var shortcut = ...

  5. android 桌面添加快捷,Android 添加桌面快捷方式操作

    /** * 为程序创建桌面快捷方式 */ private void addShortcut(){ Intent shortcut = new Intent("com.android.laun ...

  6. Ubuntu 17.04系统创建Android Studio桌面快捷方式的方法

    下面以"Android Studio"为例,阐述Ubuntu系统中创建桌面快捷方式的方法,假设已将"Android Studio"下载到"/home/ ...

  7. android自动创建桌面,Android创建桌面快捷方式

    需求:点击按钮创建快捷方式 1.用户触发创创建事件时,在手机桌面创建指定页面的快捷方式. 2.当APP关闭时,点击桌面快捷方式打开APP,跳转至指定页面 3.当APP在后台是,点击桌面快捷方式,跳转至 ...

  8. android 4.2 判断桌面快捷,Android 判断桌面是否快捷方式,不存在则创建

    要创建快捷键首先要在AndroidManifest中添加权限 /** * 快捷方式是否存在 * * @return */ public static boolean ifAddShortCut(Con ...

  9. android 添加桌面快捷方式

    .在桌面创建快捷方式方法: 方法一:通过长按某一个应用程序的图标在桌面上创建启动该应用程序的快捷方式. 这个方法安装完程序都用户都能实现. 方法二:在应用程序中构建一个Intent,然后以Broadc ...

最新文章

  1. g-git 相关命令 及其 基本原理探索(二):git 在工作中的常用命令操作 ,超级实用!!!
  2. 怎么自学python自动化测试-Python移动自动化测试面试 学习 教程
  3. 犀牛导出su文件错误插件错误_安利|一款免费插件blender-for-unrealengine
  4. 2017年10月08日普及组 蜡烛
  5. Go的GOPATH与GOROOT
  6. Java LocalDate类| isSupported()方法与示例
  7. 知识付费阅读小程序源码,前端+后台+代理+分销
  8. 七年级认识计算机课件,认识计算机(七年级)ppt课件
  9. 50欧姆线设计 高频pcb_高频电路布线的应对方法有哪些?
  10. 音乐u盘排序软件_传输数据快速的各种U盘系列 定制U盘
  11. 文献管理三剑客之Noteexpress:更新一次文献后把文献自动插一次
  12. 计算机照片无法删除吗,在win10电脑删除不了图片怎么办
  13. OA系统四级模块编写测试用例(用户模块)
  14. 中国雅虎邮箱停止服务前后帐号迁移攻略
  15. JAVA计算机毕业设计博雅楼自习室预约系统Mybatis+系统+数据库+调试部署
  16. 2022软件测试自学路线分享,附完整资料,自学也能拿高薪哟
  17. TortoiseGit assume-unchanged的文件怎么恢复
  18. 15K服务器硬盘对齐分数,第七代15000RPM硬盘 希捷捷豹15K.7评测
  19. 永中Office已失去往日的光辉
  20. java访问excel表格_Java读取excel表格(示例代码)

热门文章

  1. 从mp4文件导出mp3
  2. Java之GUI图形界面( Swing、容器组件、 布局管理器、常用容器、常用组件)
  3. 图解汉诺塔,用Python实现经典递归
  4. Java黑皮书17章第10题
  5. 【英语:基础进阶_语法进阶提升】F1.英文时态进阶
  6. 三层交换机DHCP中继
  7. gif透明背景动画_【超实用干货! 】iPad上的动画App大推荐
  8. IDC网络设备主要配置
  9. 保险业务与系统——LOMA 290 保险公司运营——第八讲——产品销售
  10. vscode 怎么编辑sphinx_VSCode Snippets 食用指南