/*** 创建添加快捷方式* 其中需要设置的有:* 1. 快捷方式的标题* 2. 快捷方式的图标* 3. 点击快捷方式后的跳转*/public static void createShortcut(Context context) {if(haveShortCut(context,context.getResources().getString(R.string.app_bind_phone_num))){APP.showToast("已经创建了快捷方式");Toast.makeText(context,"已经创建了快捷方式",Toast.LENGTH_LONG).show();return;}
// 创建添加快捷方式的IntentIntent addIntent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
// 取得快捷方式的标题String title = context.getResources().getString(R.string.app_bind_phone_num);
// 加载快捷方式的图标Parcelable icon = Intent.ShortcutIconResource.fromContext(context,  R.drawable.online_bookshelf);// 创建点击快捷方式后操作Intent,该处当点击创建的快捷方式后,再次启动该程序
//      Intent myIntent = new Intent(context, com.zhangyue.iReader.main.MainActivity.class);Intent myIntent=new Intent();
// 设置快捷方式的标题
//      myIntent.setClassName(context,"com.ireader.plug.sdk.MainActivity");myIntent.setClassName(context,"com.zhangyue.iReader.main.MainActivity");addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, title);
// 设置快捷方式的图标addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);
// 设置快捷方式对应的IntentaddIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, myIntent);
// 发送广播添加快捷方式context.sendBroadcast(addIntent);}public static boolean haveShortCut(Context context,String title){boolean isInstallShortcut = false;final ContentResolver cr = context.getContentResolver();
// 本人的2.2系统是”com.android.launcher2.settings”,网上见其他的为"com.android.launcher.settings"
//      final String AUTHORITY = "com.android.launcher2.settings";final 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", "iconResource" }, "title=?",new String[] { title }, null);// XXX表示应用名称。if (c != null && c.getCount() > 0) {isInstallShortcut = true;System.out.println("已创建");}return isInstallShortcut;}public static String getAuthorityFromPermission(Context context, String permission){if (permission == null) return null;List<PackageInfo> packs = context.getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS);if (packs != null) {for (PackageInfo pack : packs) {ProviderInfo[] providers = pack.providers;if (providers != null) {for (ProviderInfo provider : providers) {if (permission.equals(provider.readPermission)) return provider.authority;if (permission.equals(provider.writePermission)) return provider.authority;}}}}return null;}

我写的这个一定可以运行。创建快捷方式之前先查询有没有,有了Toast告诉用户,没有了,去创建。 查询快捷方式有没有的时候, 关于Launcher的快捷方式信息是 存放在 com.android.launcher的launcher.db的favorites表 中的,所以,创建,查询,删除动作都需要操作到那张表。

可能广大的网友 还会发现还会有部分手机判断是否存在快捷方式的时候信息还是不准确。会出现”Failed to find provider info for com.android.calendar”的error,既不是launcher也不是launcher2,那到底哪里出现了问题了呢?

所以,我们需要去查询provider获取真实的content的uri前缀,这样才能保证查询的时候匹配成功。提供获取真实字串的函数如下:
getAuthorityFromPermission这个方法就是干这个的。

如果你是插件程序,你想要创建快捷方式,那么你的activity一定要是expolde=”true”,不然会提示你手机上没有安装该应用。

Android 快捷方式的创建与查询 快捷方式问题大全 获取快捷方式在Launcher数据库中的信息 Failed to find provider info for com.android.la相关推荐

  1. 查询前几条记录SQL在不同数据库中的用法

    13,(1)查询前几条记录SQL在不同数据库中的用法; 1. ORACLE SELECT * FROM TABLE1 WHERE ROWNUM<=N 2. INFORMIX SELECT FIR ...

  2. android 查询快捷方式,android桌面快捷方式的创建和查询

    桌面快捷方式的创建 // 内置的在2.1上不行 // Intent intent = new Intent(Intent.ACTION_CREATE_SHORTCUT); Intent intent ...

  3. navicat查询oracle表结构,利用Navicat Premium导出数据库表结构信息至Excel的方法

    因为要编写设计文档,需要用到数据库表结构,想要在word文档中以二维表格的形式展示,故借助Excel形成二维表格样式,还是很方便的样子! 1.新建查询,并将以下SQL语句修改至需要 SELECT CO ...

  4. python用sqlite数据库创建的表在哪里_用Python在sqlite3数据库中创建两个表

    我似乎找到了很多关于如何使用两个表的教程,但我似乎不知道如何创建两个表.我可能错过了一些很简单的东西.在 我想为"我的"数据"1"和"我的" ...

  5. mysql创建用户,并赋予权限:只能查某个数据库中的某张表(只读)

    grant select on allindata_deb.user to lhz@% identified by 123456 grant select on test.test to test@% ...

  6. mysql查询父子关系树_swt 生成树[读取Mysql数据库中的父子关系表]

    数据库中的表结构: id        pid 1         0 2         1 3         1 4         2 6         2 5         4 需要生成 ...

  7. mysql数据库是以表为单位存储的,创建一个以数据库名称为参数的MySQL存储过程,以列出具有特定数据库中详细信息的表。...

    假设当前我们正在使用一个名为" query"的数据库,并且其中包含以下表-mysql> Show tables in query; +-----------------+ | ...

  8. 【Android 文件管理】分区存储 ( 创建与查询图片文件 )

    文章目录 一.分区存储模式下使用 MediaStore 插入图片 二.分区存储模式下使用 MediaStore 查询图片 三.相关文档资料 Android 分区存储系列博客 : [Android 文件 ...

  9. Android从零开始:创建样式和主题

    作为Android开发人员,我们倾向于主要专注于应用程序的功能. 但是,仅凭功能性是远远不够的. 在如今托管了超过一百万个应用程序的Google Play上,外观与功能同等重要,甚至更多. 如果您觉得 ...

最新文章

  1. mysql 三阶多项式拟合_2014年9月份考试机械CAD_CAM第二次作业
  2. python学习笔记011——内置函数__module__、__name__
  3. 访谈|在网络世界捕获威胁的猎人
  4. 信令风暴研究现状总结
  5. AngularJS 深入理解 $scope 转载▼
  6. Linux配置手册(二)配置DHCP服务器
  7. 在Spring Rest模板中跳过SSL证书验证
  8. GARFIELD@11-11-2004
  9. NB-IoT将给智能锁行业带来哪些影响?
  10. Linux运维故障排查——SSH连接Fedora不成功的原因
  11. 5.MySQL优化---索引优化专题
  12. 在线客服html前端代码QQ微信联系
  13. vue-cli 开启js代码压缩和代码分割
  14. 错误码errno和perror函数
  15. 萌新卷妹带你逃出算法无名岛第六站
  16. 星鲨StarSharks游戏打金攻略和收益详解
  17. Pycharm2018永久破解方法
  18. 个人作业2--英语学习APP案例分析
  19. 跟着团子学SAP:LTMC进阶教程-用LTMOM调整标准模版(增加WBS层级字段示例)
  20. Python入门学习难吗

热门文章

  1. .net 返回datatable显示sql列名_3汇总分析-SQL
  2. 防爆计算机最新报价,防爆计算机 工厂直销 价格优惠升级方便外形轻巧KJD127防爆计算机...
  3. C#中String与 StringBuilder 的区别
  4. python装饰器与闭包_Python 装饰器和闭包
  5. python中split的用法取第二个分片_python中的split()函数的用法
  6. python内置函数有哪些_Python集合有哪些内置函数可以使用,这些内置函数有什么功能...
  7. QT 建立信号和槽的联系(事件处理)
  8. JavaScript中的递归
  9. Linux下的格式化字符串漏洞利用姿势
  10. Linux中的In命令