/**
*
* @param context
* @param tname 桌面快捷方式的名字
* @param icon 好友头像
*/
public static void addShortCut(Context context, String tname, int icon) {
// 安装的Intent
Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); // 快捷名称
shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, tname);
// 快捷图标是允许重复
shortcut.putExtra("duplicate", false); Intent shortcutIntent = new Intent(Intent.ACTION_MAIN);
shortcutIntent.putExtra("tName", tname);
shortcutIntent.setClassName("com.example.qqshortcut", "com.example.qqshortcut.MainActivity");
shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); // 快捷图标
ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(context, icon);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes); // 发送广播
context.sendBroadcast(shortcut);
}
 /**
* 判断是否已存在该快捷方式
* @param context
* @param name 快捷方式的名字
* @return
*/
public static boolean hasShortcut(Context context,String name)
{
String authority = getAuthorityFromPermission(context,"permission.READ_SETTINGS");
boolean isInstallShortcut = false;
try {
ContentResolver cr = context.getContentResolver();
String url;
if (authority == null) {
int systemversion = Integer.parseInt(android.os.Build.VERSION.SDK);
/*大于8的时候在com.android.launcher2.settings 里查询(未测试)*/
if(systemversion < 8){
url = "content://com.android.launcher.settings/favorites?notify=true";
}else{
url = "content://com.android.launcher2.settings/favorites?notify=true";
}
}else{
url = "content://" + authority + "/favorites?notify=true";
}
Cursor c = cr.query(Uri.parse(url),null,"title=?",
new String[] {name}, null);
if(c!=null && c.moveToFirst()){
c.close();
isInstallShortcut = true ;
}
} catch (Exception e) {
e.printStackTrace();
}
return isInstallShortcut ;
}
 /**
* 动态获取查询的provider(provider跟SDK版本和厂商有关系,会有所不同),获取provider后,记得在androidManifeset.xml加上对应的权限
* 不同厂商com.android.launcher.permission.READ_SETTINGS权限不同,目前做兼容只能把目前知道的权限都加到配置文件里
* @param context
* @param permission
* @return
*/
public static String getAuthorityFromPermission(Context context, String permission){
try {
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) {
Log.e("------", "\r\n【" + provider.readPermission + "】\r\n");
if (provider.readPermission!=null && provider.readPermission.endsWith(permission)) {
return provider.authority;
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

模仿添加QQ好友桌面快捷方式的更多相关文章

  1. QQ是怎样实现好友桌面快捷方式的?

    QQ是怎样实现好友桌面快捷方式的? 不知道什么时候,QQ推出了好友桌面快捷方式.方便用户和最常保持联系的好友一键联系.核心功能一:若QQ启动了.则双击快捷方式直接打开好友聊天界面:核心功能二:若QQ未 ...

  2. js实现打开网页自动弹出添加QQ好友邀请窗口

    我们有时进一些网面或专题页面会自动弹出一个加为好友的对话框了,在研究了很久之后发现可以直接使用js来实现,下面我们一起来看js实现打开网页自动弹出添加QQ好友邀请窗口的方法. 第一步.JS脚本 这个是 ...

  3. 网站中超链接方式直接添加QQ好友

    使用情景: 在图中点击图片,会弹出添加qq好友的窗口进行好友添加. 链接如下: tencent://AddContact/?fromId=45&fromSubId=1&subcmd=a ...

  4. 使用Javascript无限添加QQ好友原理解析

    做QQ营销的朋友都知道,QQ加好友是有诸多限制的,IP限制,次数限制,二维码限制,人数限制,使用软件自动加好友会遇到各种各样的问题,很多软件通过模拟人工添加QQ号码,在添加几个之后就会遇到腾讯规则限制 ...

  5. kailli添加桌面快捷方式

    kailli添加桌面快捷方式 /usr/share/applications/xxx.desktop 注意大小写要与Name对应 [Desktop Entry] Version=1.0 Name=Tu ...

  6. CentOS与ubuntu添加eclipse桌面快捷方式的方法整理

    CentOS环境下用右键添加启动器的方式安装(ubuntu早期版本也是这样的) [1]用rmp包安装jdk, 在/usr/local目录下安装:命令 #rpm -ivh   jdk.rpm 然后#vi ...

  7. java模仿qq好友面板的布局(BoxLayout问题)

    .............. JLabel ll = new JLabel(dlg.getNameText() + ":" + dlg.getIPText(), ii[index] ...

  8. Android 添加、移除和判断 桌面快捷方式图标

    思路: Launcher为了应用程序能够定制自己的快捷图标,就注册了一个 BroadcastReceiver 专门接收其他应用程序发来的快捷图标定制信息.所以只需要根据该 BroadcastRecei ...

  9. Android开发被添加到桌面快捷方式

    Android开发被添加到桌面快捷方式 对于一个希望拥有很多其它用户的应用来说.用户桌面能够说是全部软件的必争之地,假设用户在手机桌面上建立了该软件的快捷方式.用户将会更频繁地使用该软件. 因此,全部 ...

随机推荐

  1. Windows之IOCP

    IOCP全称I/O Completion Port,中文译为I/O完成端口.IOCP是一个异步I/O的Windows API,它可以高效地将I/O事件通知给应用程序,类似于Linux中的Epoll,关 ...

  2. SpringCloud基础教程学习记录

    这个学习记录是学习自翟永超前辈的SpringCloud的基础教程. 自己写这个教程的目的主要是在于,想要更凝练总结一些其中的一些实用点,顺便做个汇总,这样自己在复习查看的时候更加方便,也能顺着自己的思 ...

  3. laravel 常用知识总结

    看到一篇别人的文章感觉写的不错 就copy过来了 学习源头: https://www.cnblogs.com/yjf512/p/3830750.html aravel是个很强大的PHP框架,它剔除了开 ...

  4. (转)在Windows平台上安装Node.js及NPM模块管理

    本文转载自:http://www.cnblogs.com/seanlv/archive/2011/11/22/2258716.html 之前9月份的时候我写了一篇关于如何在Windows平台上手工管理 ...

  5. Jconsole 测试.

    Jconsole 测试. 1 下载并安装 d:\Program Files\Java\jdk1.8.0_111\ JDK自带,Windows下图形界面,监控分析Java程序 2 查看jmx进程号 [r ...

  6. Python命令模块argparse学习笔记(一)

    首先是关于-h/--help参数的设置 description:位于help信息前,可用于描述helpprog:描述help信息中程序的名称epilog:位于help信息后usage:描述程序的用途a ...

  7. ARRINC424—MORA(GRID)格式

    每一整数经.纬度为一格,每格MORA值3位数字,表示百英尺.无法获知MORA值得网格一UNK表示. 经纬网格起始点坐标,每个网格从左下角开始计数,每经纬度一度切分一个网格.每行数据代表某一维度上往东或 ...

  8. list()的相关问题

    由php手册中可以看到对list的定义: list — 把数组中的值赋给一些变量,像 array() 一样,这不是真正的函数,而是语言结构.list() 用一步操作给一组变量进行赋值. array l ...

  9. node与vue结合的前后端分离跨域问题

    第一点:node作为服务端提供数据接口,vue使用axios访问接口, 安装axios npm install axios --save 安装完成后在main.js中增加一下配置: import ax ...

  10. Solaris10 如何设置空闲ssh连接超时断开

    在ssh的配置文件中有2个参数可以控制空闲连接超时断开.这2个参数是ClientAliveCountMax和ClientAliveInterval. Solaris10上设置空闲ssh连接超时断开的方 ...