在系统里设置文件默认打开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 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" /> 及系统签名噢

更多相关文章

  1. Android 如何识别判断小米 魅族 华为 系统 MIUI EMUI FLYME
  2. android 系统定制的小技巧(网络收集)
  3. android编译系统 build/core
  4. Android实现屏幕截图并保存截图到指定文件
  5. Android 中读取SD卡文件时抛出NullPointerException错误解决办法
  6. 如何修改Android5.1系统USB连接方式默认MTP
  7. Android media媒体库分析之:分类别统计媒体文件大小

随机推荐

  1. Galaxy S8及S+全屏显示适配
  2. android开发教程(十一)——android应用程
  3. 我在51CTO的第一篇博客--关于6个小时调试
  4. Android(安卓)跳转权限设置界面的终极适
  5. 【eoe教程】Android中自定义视图的绘制方
  6. Android(安卓)源码开发调试方法
  7. 一句话让你的ScrollView、ListView弹力十
  8. Android-利用SharedPreferences实现记住
  9. Android(安卓)Framework移植----长按返回
  10. android中ListView的显示效果