Изменение строки Android-агента MediaPlayer по умолчанию для Android - PullRequest
2 голосов
/ 01 сентября 2011

Можно ли изменить стандартную строку Android MediaPlayer User-Agent по умолчанию?Если да, то как?

Ответы [ 2 ]

1 голос
/ 28 августа 2017
    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");
        }
    }

Я проверял, он работал на:

Yulong Coolpad 8722V Android 5.1

Nox AVD Android 4.4

Надежды работают на вашем устройстве!

0 голосов
/ 01 сентября 2011

Вам просто нужно перезаписать HTTPDataSource.cpp (см. HTTPDataSource :: read_at).А затем внедрите его в ядро ​​медиапроигрывателя =) (это не так просто, как мне хотелось бы сказать), посмотрите сначала на это исследование - Поток событий во время создания медиаплеера в Android Framework

...