Chrome浏览器播放本地的音频和视频,会概率性的出现播放出错的情况,由于没有改APK的源码,无法将该问题进行根源性解决,所以只能将Chrome浏览器可以播放音频和视频的选项去掉
将Chrome浏览器从音频和视频播放列表中去掉,在 frameworks/base/core/java/com/android/internal/app/ResolverActivity.java类里面
1.先定义一个全局变量
private boolean isAudioandVideo;
2.在onCreate() 方法里面判断当前播放的类型是否是音频或视频,如果是,则将isAudioandVideo设为true
protected void onCreate(Bundle savedInstanceState, Intent intent,CharSequence title, int defaultTitleRes, Intent[] initialIntents,List<ResolveInfo> rList, boolean supportsAlwaysUseOption) {
setTheme(R.style.Theme_DeviceDefault_Resolver);
super.onCreate(savedInstanceState);
......
//add start
String type = intent.getType();
String action = intent.getAction();
Log.d(TAG,"oncreate type = " + type + ", action = " + action);
if("android.intent.action.VIEW".equals(action) && ("audio/3gpp".equals(type) || "video/*".equals(type))) {
isAudioandVideo = true;
}
//add end
}
3.在addResolveInfo方法(添加播放列表)的方法中,在改方法的for循环内添加判断isAudioandVideo的值和mResolveInfo.activityInfo是否不为空,满足条件的话,则进入判断mResolveInfo.activityInfo.packageName等于Chrome的包名com.android.chrome的话,就return掉,不走下面的 mDisplayList.add(dri); 代码,这样播放本地音频和视频选择播放器的列表,就不会有Chrome的选项
private void addResolveInfo(DisplayResolveInfo dri) {
if (dri != null && dri.mResolveInfo != null
&& dri.mResolveInfo.targetUserId == UserHandle.USER_CURRENT) {
// Checks if this info is already listed in display.
for (DisplayResolveInfo existingInfo : mDisplayList) {
if (resolveInfoMatch(dri.mResolveInfo, existingInfo.mResolveInfo)) {
return;
}
}
//add start
if(REMOVE_CHROME_VIDEO && mChrome && dri.mResolveInfo.activityInfo != null) {
Log.d(TAG, "addResolveInfo packageName = " + dri.mResolveInfo.activityInfo.packageName);
if("com.android.chrome".equals(dri.mResolveInfo.activityInfo.packageName)) {
return;
}
}
//add end
mDisplayList.add(dri);
}
}