Android应用添加桌面快捷方法

为Android应用创建快捷方式是通过发送创建快捷方式的广播,然后确定唯一的Activity是通过action加category,然后Android的指引都是intent,所以创建广播的代码中必须要有指向该唯一activity的intent,然后发送广播,由系统把这个intent相关信息添加到桌面launcher要读取的用来保存快捷方式的数据表中,(一般是favorite表,不一般的就另做处理了)

代码最亲切,上代码:

首先要为该应用添加必要的权限

测试环境为Adnroid 2.1以上。 

第一步:AndroidManifest.xml 权限配置:
 
添加快捷方式权限:
  
<uses-permission android:name= "com.android.launcher.permission.INSTALL_SHORTCUT" /> 
  
验证快捷方式是否存在权限: 
  
<uses-permission android:name= "com.android.launcher.permission.READ_SETTINGS"  />
  
删除快捷方式权限:  
  
<uses-permission android:name= "com.android.launcher.permission.UNINSTALL_SHORTCUT"  />

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
   
代码如下:
/** 
* 添加快捷方式  
*/ 
public  class  ShortCutSample { 
     public  void  creatShortCut(Activity activity,String shortcutName, int  resourceId) 
    
         Intent intent =  new  Intent(); 
         intent.setClass(activity, activity.getClass()); 
         //以下两句是为了在卸载应用的时候同时删除桌面快捷方式
         intent.setAction( "android.intent.action.MAIN" ); 
         intent.addCategory( "android.intent.category.LAUNCHER" ); 
         
         Intent shortcutintent =  new  Intent( "com.android.launcher.action.INSTALL_SHORTCUT" ); 
         //不允许重复创建 
         shortcutintent.putExtra( "duplicate" false ); 
         //需要实现的快捷方式的名称 
         shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_NAME, shortcutName); 
         //快捷方式的图标
         Parcelable icon = Intent.ShortcutIconResource.fromContext(activity.getApplicationContext(), resourceId); 
         shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon); 
         //点击快捷图片,运行的程序主入口 
         shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent); 
         //发送广播,完成创建
         activity.sendBroadcast(shortcutintent); 
     }
  
//删除快捷方式   
public  void  deleteShortCut(Activity activity,String shortcutName) { 
     Intent shortcut =  new  Intent( "com.android.launcher.action.UNINSTALL_SHORTCUT" ); 
     //快捷方式的名称 
     shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,shortcutName); 
     //在网上看到到的基本都是一下几句,测试的时候发现并不能删除快捷方式。 
     //String appClass = activity.getPackageName()+"."+ activity.getLocalClassName(); 
     //ComponentName comp = new ComponentName( activity.getPackageName(), appClass); 
     //shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(comp)); 
     
     //改成以下方式能够成功删除,估计是删除和创建需要对应才能找到快捷方式并成功删除 
     Intent intent =  new  Intent(); 
     intent.setClass(activity, activity.getClass()); 
     intent.setAction( "android.intent.action.MAIN" ); 
     intent.addCategory( "android.intent.category.LAUNCHER" ); 
     shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,intent); 
     activity.sendBroadcast(shortcut); 
 
 
// 判断是否存在快捷方式 
private  boolean  hasShortCutBefore(String shortcutName) {  
    boolean  isInstallShortcut =  false ;  
    final  ContentResolver cr =  this .getContentResolver();  
    String permission =  "com.android.launcher.permission.READ_SETTINGS" ; //拥有读取setting权限的应用  
    List<PackageInfo> packs =  this .getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS); //找出所有已安装并提供服务的包信息  
    if  (packs ==  null ) {  
        return  false ;  
    }  
    String tempAuthority =  null ;  
    for  (PackageInfo pack : packs) {  
        ProviderInfo[] providers = pack.providers;  
        if  (providers !=  null ) {  
            for  (ProviderInfo provider : providers) { //遍历提供  
                if  (permission.equals(provider.readPermission) || permission.equals(provider.writePermission)) {  
                    //如果该提供者的读或者写权限跟我们申请的权限相同,则确定了位置  
                    tempAuthority = provider.authority;  
                }  
            }  
        }  
    }  
 
    final  String AUTHORITY = tempAuthority ==  null  "com.android.launcher.settings"  : tempAuthority; //默认在这个地址com.android.launcher.settings  
    final  Uri CONTENT_URI = Uri.parse( "content://"  + AUTHORITY +  "/favorites?notify=true" );//组装表的uri  
    try  { //加异常捕获是因为有些表名居然不是favorites 
        Cursor c = cr.query(CONTENT_URI,  new  String[]{ "title" "iconResource" },  "title=?" new  String[]{shortcutName},  null ); 
        if  (c !=  null  && c.getCount() >  0 ) {  
            isInstallShortcut =  true ;  
            c.close();  
        }  
    } catch  (Exception e){  
          
    }  
    return  isInstallShortcut;  
}  
  
调用测试代码, 代码如下:
  
  public  class  mainActivity  extends  Activity { 
     // Called when the activity is first created. 
     @Override 
     public  void  onCreate(Bundle savedInstanceState) { 
         super .onCreate(savedInstanceState); 
         setContentView(R.layout.main); 
         ShortCutSample sample = new  ShortCutSample(); 
         String shortcutName=getString(R.string.app_name); 
         if (sample.hasShortcut( this , shortcutName)) 
         sample.deleteShortCut( this ,shortcutName); 
         else 
         sample.creatShortCut( this ,shortcutName,R.drawable.icon); 
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值