42

WebViewアクティビティなしでブラウザのユーザーエージェントを取得する方法はありますか?

次の方法で取得できることを知っていますWebView

WebView view = (WebView) findViewById(R.id.someview);
String ua = view.getSettings().getUserAgentString() ;

しかし、私の場合、webview オブジェクトを持っていない/必要とせず、ユーザー エージェント文字列を取得するためだけに作成したくありません。

4

6 に答える 6

62

持っていない場合は、このようにして試してみることができます

String ua=new WebView(this).getSettings().getUserAgentString();

編集-

のドキュメントはgetUserAgentString()言う

WebView のユーザー エージェント文字列を返します

なので申告しないと取れないと思います。私が間違っていたら誰かが私を訂正します

于 2010-09-02T10:21:48.477 に答える
60

Android 2.1 以降を使用している場合は、もっと簡単な方法があります。確かに、これは webview が返すユーザー エージェント文字列とまったく同じではありませんが、目的には十分に役立つ可能性があります。

Web ビューからプルすることの追加の利点として、(UI スレッドだけでなく) 任意のスレッドからこれを使用できます。

http.agent というシステム プロパティがあり、これを使用して User-Agent 文字列を取得できます。

String userAgent = System.getProperty("http.agent");

詳細については、「ユーザー エージェント文字列をプログラムで取得する」を参照してください。

于 2012-09-07T08:13:49.970 に答える
10

Android 2.1 以降、System.getProperty("http.agent");を使用する必要があります。

また、最初に WebView を作成する必要もありません。これが利点であり、非 uithread 内で使用できます。

挨拶スティーブ

于 2013-11-05T18:09:42.433 に答える
1

Idolonの回答のおかげで、私のアプリはこれをバックグラウンドで処理できました。

しかし、どういうわけか、2.3.3を実行するAT&TのHTC Inspire 4Gでは、catchステートメントに移動し、バックグラウンドスレッドで実行できなくなります。これに対する私の解決策は次のとおりです。

public static String getUserAgent(Context context) {
    try {
        Constructor<WebSettings> constructor = WebSettings.class.getDeclaredConstructor(Context.class, WebView.class);
        constructor.setAccessible(true);
        try {
            WebSettings settings = constructor.newInstance(context, null);
            return settings.getUserAgentString();
        } finally {
            constructor.setAccessible(false);
        }
    } catch (Exception e) {
        String ua;
        if(Thread.currentThread().getName().equalsIgnoreCase("main")){
            WebView m_webview = new WebView(context);
            ua = m_webview.getSettings().getUserAgentString();
        }else{
            mContext = context;
            ((Activity) mContext).runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    WebView webview = new WebView(mContext);
                    mUserAgent = webview.getSettings().getUserAgentString();
                }

            });
            return mUserAgent;
        }
        return ua;
    }
}

(フィールドにmContextとmUserAgentがあるとします)

于 2011-09-02T21:50:41.753 に答える