您的位置:首页 > 移动开发

在系统里设置文件默认打开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" /> 及系统签名噢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息