2015-03-19 13 views
11

Ho Lollipop e vedo che abbiamo un'app separata per "webview del sistema Android". C'è un modo per ottenere il suo numero di versione dalla mia app che utilizza un'istanza di WebView?Ottieni il numero di versione di WebView per lollipop?

Vorrei segnalare alcune statistiche sulla versione utilizzata dai miei utenti.

Grazie

+3

Questa è un'idea interessante. Non conosco un modo per ottenerne uno da 'WebView' stesso, anche se idealmente sarebbe un'opzione per questo. Nel peggiore dei casi, se riesci a capire l'ID dell'applicazione di quell'app "android system webview", puoi ottenere 'versionCode' e' versionName' per esso da 'PackageManager'. – CommonsWare

+0

Il componente aggiornabile 'WebView' è https://play.google.com/store/apps/details?id=com.google.android.webview e il suo' versionName' sembra seguire grosso modo lo schema di denominazione della versione di Chrome. –

risposta

19

Come controllare la stringa utente-agente?

Log.i("WebViewActivity", "UA: " + mWebView.getSettings().getUserAgentString()); 

Per me, questo uscite:

stringa User-agent: Mozilla/5.0/537,36 (KHTML, come Gecko) Version (Linux; Nexus 4 Costruire/LRX21T; Android 5.0) AppleWebKit /4.0 Chrome/37.0.0.0 Safari mobile/537,36

Maggiori informazioni: WebView on Android

Nel caso in cui si sostituisce stringa UA con il proprio:

String getWebviewVersionInfo() { 
    // Overridden UA string 
    String alreadySetUA = mWebView.getSettings().getUserAgentString(); 

    // Next call to getUserAgentString() will get us the default 
    mWebView.getSettings().setUserAgentString(null); 

    // Devise a method for parsing the UA string 
    String webViewVersion = 
      parseUAForVersion(mWebView.getSettings().getUserAgentString()); 

    // Revert to overriden UA string 
    mWebView.getSettings().setUserAgentString(alreadySetUA); 

    return webViewVersion; 
} 
+1

Interessante. La mia reazione originale era che l'user agent doveva essere diverso dalla versione 'WebView', dato che stai segnalando solo 37, ma ne hanno appena annunciati 40. Ma vedo che il mio Nexus 4 ha la versione 37 dell'app Android WebView di sistema, suggerendo che il mio agente utente segnalerebbe anche 37. Preferirei qualcosa di più ... definitivo, ma se l'agente utente tiene traccia con l'aggiornamento dell'app di sistema, questo è un po 'più semplice dell'approccio "PackageManager" di esaminare la versione dell'app di sistema si. – CommonsWare

+3

Molto bello! Ho intenzione di lasciare la bounty aperta un altro paio di giorni, nel caso qualcuno abbia una risposta migliore, ma la tua sembra abbastanza solida per l'uso di produzione, data la regex giusta. Naturalmente, il PO può anche intervenire e accettare le risposte come l'OP ritiene opportuno. Grazie! – CommonsWare

+0

Forse indicando l'ovvio, ma questo non funzionerà se si sostituisce l'agente utente con il proprio agente utente personalizzato. – Randy

13

UPDATE: A quanto pare questo non sempre con precisione dare al cliente effettivo WebView in uso sul dispositivo di destinazione. A partire da Android 7.0 gli utenti possono select preferred client (h/t @Greg Dan).


In primo luogo, si ottiene il nome del pacchetto da Google Play Store:

https://play.google.com/store/apps/details?id=com.google.android.webview

Allora questo

PackageManager pm = getPackageManager(); 
try { 
    PackageInfo pi = pm.getPackageInfo("com.google.android.webview", 0); 
    Log.d(TAG, "version name: " + pi.versionName); 
    Log.d(TAG, "version code: " + pi.versionCode); 
} catch (PackageManager.NameNotFoundException e) { 
    Log.e(TAG, "Android System WebView is not found"); 
} 

D/WebViewDetails﹕ version name: 39 (1743759-arm) 
D/WebViewDetails﹕ version code: 320201 

Spero che questo aiuta.

+1

Le cose sono cambiate in Android 7 e questo metodo non è più corretto https://developer.android.com/about/versions/nougat/android-7.0.html#webview –

+0

Grazie per l'heads up di @GregDan! Aggiunto un aggiornamento sopra. – ozbek

Problemi correlati