Android 快捷方式的创建与查询 快捷方式问题大全 获取快捷方式在Launcher数据库中的信息 Failed to find provider info for com.android.la
/**
* 创建添加快捷方式
* 其中需要设置的有:
* 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;
}
// 创建添加快捷方式的Intent
Intent 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);
// 设置快捷方式对应的Intent
addIntent.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的更多相关文章
- Android+PHP+MYSQL把数据库中的数据显示在Android界面上
俗话说,好记性不如烂笔头.今天终于体会其中的道理了.昨天写好的代码不知道为何找不到了.所以今天我一定得抽出一点时间把我的代码保存起来,以防我的代码再没有了. 还是先上图片. 这个界面是用ListVie ...
- Android之运行时相机权限和联系人权限获取
原文:Android之运行时相机权限和联系人权限获取 本文链接:http://blog.csdn.net/qq_16628781/article/details/61623502 Android之运行 ...
- Android开发之创建桌面快捷方式
Android创建桌面快捷方式就是在桌面这个应用上创建一个快捷方式,桌面应用:launcher2 通过查看launcher2的清单文件: <!-- Intent received used to ...
- 【转】Android 快捷方式的创建
http://blog.csdn.net/lenmoyouzi/article/details/16939977 一.在日常开发中,我们经常会遇到这样的需求就是网桌面添加快捷方式:常见的快捷方式有两种 ...
- Python创建、删除桌面、启动组快捷方式的例子分享
一.Python创桌面建快捷方式的2个例子 例子一: 代码如下: import osimport pythoncomfrom win32com.shell import shell from w ...
- SQL Server 查询分析器提供的所有快捷方式(快捷键)
SQL Server程序员经常要在SSMS(SQL Server Management Studio)或查询分析器(2000以前)中编写T-SQL代码.以下几个技巧,可以提升工作效率. 以下说明以SS ...
- Android开发 ---代码创建选项菜单、隐藏菜单项、菜单的生命周期,菜单按钮图标设置、搜索框、xml中设置子菜单
1.activity_main.xml 描述: 定义了一个按钮 <?xml version="1.0" encoding="utf-8"?> < ...
- android 之fragment创建
1.使用xml标签 1.1定义两个重要属性 <fragment android:id="@+id/fregment_top" android: ...
- Linq专题之创建Linq查询表达式
本节我们主要介绍一下如何创建查询集合类型,关系数据库类型,DataSet对象类型和XML类型的数据源的Linq查询表达式. 下面在实例代码ReadyCollectionData()函数创建了准备的数据 ...
随机推荐
- head头部内放些什么标签?
前言 在学html时,在头部标签内除了知道可以放title标签外,不知道还可以放什么标签,一脸迷茫后赶快去百度,然后小笔记记起来,整理一番. 关键字 <title> <meta&g ...
- 实现vmare虚拟机系统随主机开机自动启动
服务器主机上的虚拟机每次开机要手动启动是很麻烦的事,so,在网上找到一方法让虚拟机随主机开机自动运行:挺方便的,记录下来: 1.操作环境 主机:windows 2003 虚拟机:centos6 2.下 ...
- Selenium入门系列1 打开浏览器访问网页,退出浏览器
对于功能自动化的理解就是用测试工具替代手工.手工怎么操作的,工具也如何操作. 手工测试:在前置条件下,执行一定的操作步骤>与预期结果对比 功能自动化:在前置条件下,识别对象 >操作对象&g ...
- 2019.03.09 ZJOI2019模拟赛 解题报告
得分: \(20+0+40=60\)(\(T1\)大暴力,\(T2\)分类讨论写挂,\(T3\)分类讨论\(40\)分) \(T1\):天空碎片 一道神仙数学题,貌似需要两次使用中国剩余定理. 反正不 ...
- Spring boot 集成 Swagger
添加依赖包 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swa ...
- Mac下安装OpenCV3.0和Anaconda和环境变量设置
入手Mac几天了,想在Mac OS下玩玩OpenCV和keras,间歇捣鼓了两天,终于搞定zsh.OpenCV3.0以及Anaconda.OpenCV3.0刚发布不久,这方面的资料也不是很多,能够查到 ...
- django模板层之静态文件引入优化
1.新手使用 我们一般在初学django的情况下,引入django的静态文件一般有如下两种方式: 通过路径引用: <script type="text/javascript" ...
- 解决mysql远程连接失败的问题
问题描述 在我远程连接我的服务器数据库的时候,navicat给我提示了这么一个错误: ERROR : Host 'xxx' is not allowed to connect to thisMySQL ...
- python 计算提成代码
while True: with open('8564.txt') as f: r = f.readlines() start = input("请输入要查询的日期,例如20180101 : ...
- WIN10使用安装包安装Mysql5.6+JDBC
很多教程教的是安装绿色版mysql或者是安装zip版的mysql,没什么不好,各有千秋,今天要教大家的是使用mysql-installer-community-5.6.43.0.msi安装mysql5 ...