在系统里设置文件默认打开APP

在系统里设置文件默认打开APP

public boolean setPreferredActivity(String packName,String clsName,Uri uri,String type){
                PackageManager packageManager = mContext.getPackageManager();
                  String str1 = "android.intent.category.DEFAULT";
                  String str3 = "android.intent.action.VIEW";

                  // 设置默认项的必须参数之一,用户的操作符合该过滤器时,默认设置起效
                  IntentFilter filter = new IntentFilter(str3);
                  filter.addCategory(str1);
                  try {
                        filter.addDataType(type);
                } catch (MalformedMimeTypeException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                  ComponentName component = new ComponentName(packName, clsName);

                  Intent intent = new Intent(str3);
                  intent.addCategory(str1);
                  intent.setDataAndType(uri, type);

                  List<ResolveInfo> resolveInfoList = packageManager
                    .queryIntentActivities(intent,
                      PackageManager.GET_INTENT_FILTERS);

                  int size = resolveInfoList.size();
                  ComponentName[] arrayOfComponentName = new ComponentName[size];
                  int bestMatch = -1;
                  for (int i = 0; i < size; i++) {
                   ActivityInfo activityInfo = resolveInfoList.get(i).activityInfo;
                   String packageName = activityInfo.packageName;
                   String className = activityInfo.name;

                   int uid = resolveInfoList.get(i).activityInfo.applicationInfo.uid;
                   int match = resolveInfoList.get(i).match;
                   Log.e(Tag, packageName+"/"+className+"/"+uid+"/"+match);
                   if(packageName.equals(packName)){
                           bestMatch = match;
                   }

                   // 清除之前的默认设置
                   packageManager.clearPackagePreferredActivities(packageName);
                   ComponentName componentName = new ComponentName(packageName,
                     className);
                   arrayOfComponentName[i] = componentName;
                  }
                  if(bestMatch<0){
                  packageManager.addPreferredActivity( filter, 
                  IntentFilter.MATCH_CATEGORY_SCHEME, arrayOfComponentName, component,
                  UserHandle.getCallingUserId());//解决第一次调用不生效问题
                          return false;
                  }else{
                  packageManager.addPreferredActivity(filter,
                                  bestMatch, arrayOfComponentName,
                    component,UserHandle.getCallingUserId());
                  return true;
                  }
        }

这是设置默认的视频播放器
        public boolean setPreferredActivityOfVideo(String packName,String clsName){
                boolean result = false;
                Cursor cur = mContext.getContentResolver().query(
                                Media.EXTERNAL_CONTENT_URI, null, null, null, null);
                int pathIndex = cur.getColumnIndex(Media.DATA);
                if(cur.moveToFirst()){
                        String path = cur.getString(pathIndex);
                        Uri uri = Uri.fromFile(new File(path));
                        result = setPreferredActivity(packName, clsName, uri, "video/*");
                }
                cur.close();
                return result;
        }

记得 <uses-permission android:name="android.permission.SET_PREFERRED_APPLICATIONS" /> 及系统签名噢

猜你喜欢

转载自blog.csdn.net/xl19862005/article/details/70712725
今日推荐