判断桌面快捷方式是否已经创建

本文介绍了一种方法来判断给定的应用程序是否已经在用户的桌面创建了快捷图标,包括了不同Android版本的适配策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般情况况下判断为以下代码:

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
/**
      * 判断桌面是否已经创建了快捷图标
     
      * @param context
      * @param packageName
      * @return
      */
     public static boolean getIsOnDesktopByPkgName(Context context, String packageName) {
         final ContentResolver cr = context.getContentResolver();
         String authority =  "com.android.launcher.settings" ;
         int sdk = android.os.Build.VERSION.SDK_INT;
         if  (sdk >= 8 && sdk < 19) {
             authority =  "com.android.launcher2.settings" ;
         else  if  (sdk >= 19) {
             authority =  "com.android.launcher3.settings" ;
         }
         final Uri CONTENT_URI = Uri.parse( "content://"  + authority +  "/favorites?notify=true" );
 
 
         Cursor c =  null ;
         try  {
             c = cr.query(CONTENT_URI,  new  String[] {  "title" "intent"  },  "" new  String[] {},  null );
             if  (c !=  null ) {
                 final int intentIndex = c.getColumnIndexOrThrow( "intent" );
                 while  (c.moveToNext()) {
                     String intentDescription = c.getString(intentIndex);
                     Intent intent =  null ;
                     try  {
                         if  (!StringUtils.isEmpty(intentDescription)) {
                             intent = Intent.parseUri(intentDescription, 0);
                         }
                     catch  (URISyntaxException e) {
                         continue ;
                     }
                     if  (intent !=  null  && intent.getComponent() !=  null ) {
                         String pkgName = intent.getComponent().getPackageName();
                         if  (packageName.equals(pkgName)) {
                             return  true ;
                         }
                     }
                 }
             }
         } finally {
             if  (c !=  null  && !c.isClosed()) {
                 c.close();
             }
         }
         return  false ;
     }
         return  false ;
     }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static boolean hasShortcut(Activity activity, String shortcutName) {
         String url =  "" ;
         url =  "content://"  + getAuthorityFromPermission(activity,  "com.android.launcher.permission.READ_SETTINGS" )
                 "/favorites?notify=true" ;
         ContentResolver resolver = activity.getContentResolver();
         Cursor cursor = resolver.query(Uri.parse(url),  new  String[] {  "title" "iconResource"  },  "title=?" ,
                 new  String[] { shortcutName },  null );
         if  (cursor !=  null  && cursor.moveToFirst()) {
             cursor.close();
             return  true ;
         }
         return  false ;
     }
    



上面的getAuthorityFromPermission(Activity activity,String shortcutname)代码如下:
private 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 ;
     }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值