2016-12-20 4 views
5

Android 7.0 позволяет пользователям (через опции разработчика) выбирать реализацию своего WebView. Пользователь может выбрать автономный WebView или использовать APK для рендеринга WebView. ReferenceОпределение реализации WebView (System WebView или Chrome) в Android 7

Поскольку это потенциально означает, что те, кто использует WebViews, теперь имеют две разные базы кода, о которых нужно беспокоиться, было бы полезно узнать, какая реализация выбрана в настоящий момент.

Есть ли способ определить, какая версия WebView выбрана в Android 7?

ответ

0

Похоже, это теперь доступно в Android O Preview:

Ссылка: https://developer.android.com/preview/features/managing-webview.html

Начиная с Android 7.0 (уровень API 24), пользователи могут выбрать один из нескольких различных пакетов для отображения веб-контента в объекте WebView. Android O содержит API для извлечения информации, связанной с пакетом , который отображает веб-контент в вашем приложении. Этот API особенно полезен при анализе ошибок, возникающих только тогда, когда ваше приложение пытается отобразить веб-контент с использованием реализации WebView конкретного приложения .

Чтобы использовать этот API, добавьте логику, показанную в следующем фрагменте кода:

PackageInfo webViewPackageInfo = WebView.getCurrentWebViewPackage(); 
Log.d(TAG, "WebView version: " + webViewPackageInfo.versionName); 

WebView.getCurrentWebViewPackage Документация: https://developer.android.com/reference/android/webkit/WebView.html#getCurrentWebViewPackage()

0

В качестве дополнительной информации к the answer of DataDino, для API, ниже 26 здесь блок кода, который даст желаемый результат:

 

    Class webViewFactory = Class.forName("android.webkit.WebViewFactory"); 
    Method method = webViewFactory.getMethod("getLoadedPackageInfo"); 
    PackageInfo packageInfo = (PackageInfo) method.invoke(null, null); 

    if ("com.android.webview".equals(packageInfo.packageName)) { 
     // "Android System WebView" is selected 
    } else { 
     // something else selected 
     // in case of chrome it would be "com.android.chrome" 
    }