yuankai
yuankai

Reputation: 167

Changing Android's default MediaPlayer User-Agent string

Is it possible to change Android's default MediaPlayer User-Agent string? If so, how?

Upvotes: 2

Views: 3090

Answers (2)

LEORChn
LEORChn

Reputation: 11

    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");
        }
    }

I've tested, it worked at:

Yulong Coolpad 8722V Android 5.1

Nox AVD Android 4.4

Hopes work at your device!

Upvotes: 1

Dmitry Polishuk
Dmitry Polishuk

Reputation: 119

You 'just' need to overwrite HTTPDataSource.cpp (see HTTPDataSource::read_at). And then inject it to the core of media player =) (not so easy thing i need to say) look at this research first - The flow of events during the Media Player Creation in Android Framework

Upvotes: 0

Related Questions