在系统里设置文件默认打开APP
2017-04-25 11:59
204 查看
在系统里设置文件默认打开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" /> 及系统签名噢
相关文章推荐
- AIR 用系统默认应用打开文件 Open with default App
- 指定程序打开指定文件及启动系统设置相关界面
- 打开ASP.NET Web项目时,此项目的默认Web访问模式设置为文件共享, 但是无法从路径“...”打开“...”处的项目文件夹。返回的错误是: 无法打开Web项目“”。返回的错误是: 无法打开Web项目“...”。文件路径“...”怀URL“...”不
- .NET 打开sln工程时 此项目的默认Web访问模式设置为文件共享
- ubuntu设置文件的默认打开程序(转载)
- 设置Eclipse编辑器的默认文件打开方式
- 在MyEclipse中如何设置jsp,xml等文件默认的打开方式
- 如何设置Eclipse编辑器的默认文件打开方式
- 如何设置Eclipse编辑器的默认文件打开方式
- 如何设置eclipse的文件的默认打开方式
- Java调用系统默认程序打开本地文件
- 取消特定文件的默认打开设置
- 如何设置Win7打开文件默认程序服从安排
- Mac OS X系统上改变文件默认打开方式的方法
- Eclipse设置文件默认打开方式
- Delphi使用系统默认程序打开外部文件
- 如何设置Eclipse编辑器的默认文件打开方式
- 修改mac系统下某种文件类型的默认打开方式
- 把自己的应用设置关联为android系统默认打开程序
- myEclipse的JSP文件默认打开方式设置