更改Android的默认MediaPlayer用户代理字符串
答
您只需要覆盖HTTPDataSource.cpp(请参阅HTTPDataSource :: read_at)。 然后它注入到媒体播放器=核心)(不是那么容易的事情,我需要说的) 看看这个研究第一 - The flow of events during the Media Player Creation in Android Framework
答
String referer="Referer: http://www.google.com/\r\n",
useragent="USER-AGENT: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36\r\n";
Map<String,String>mhead;
VideoView vp;
void prepareHeader(){
mhead=new HashMap<String,String>();
if(android.os.Build.VERSION.SDK_INT >20){
//if 5.X or higher, Fix User-Agent be force set by system
mhead.put(referer.split(": ")[0],referer.split(": ")[1]);
mhead.put(useragent.split(": ")[0],useragent.split(": ")[1]);//"User-Agent" => "USER-AGENT"
}else{
//if 4.X or lower, Fix Referer cannot be set
mhead.put(useragent.split(": ")[0],useragent.split(": ")[1]+referer);//"User-Agent: ... \r\nReferer: ..."
}
setVideoURI(Uri.parse(path),mhead);
}
void setVideoURI(Uri uri,Map<String,String>mHeaders){
try{
Class vpclass=Class.forName("android.widget.VideoView");
Method[]ms=vpclass.getMethods();
Method mTarget=null;
for(Method m:ms){
if(m.getName().equals("setVideoURI"))
if(m.getParameterTypes().length==2) mTarget=m;
}
if(mTarget==null){
//AlertDialog(this,"Set Headers Fail","Sorry... your device is not support this way.","ok");
}else{
mTarget.invoke(vp,new Object[]{uri,mHeaders});
}
}catch(Exception e){
//AlertDialog(this,"Set Headers Fail",Arrays.toString(e.getStackTrace()),"ok");
}
}
我测试过,它曾在:
宇龙酷派8722V的是Android 5.1
氮氧化物AVD是Android 4.4
工作的希望在您的设备!
非常感谢你!我的朋友! – yuankai
如果我想改变它在我的应用程序,而不是改变框架代码,我该怎么做? – yuankai
@dmitry你分享dosent的网址有资源,你可以分享任何其他网址,这将是有益的。 – YLS