Почему android.webkit.WebView не позволяет PhoneGap выполнять свои плагины или инициализировать локальный ресурс HTML
У меня есть WebView, который не позволяет PhoneGap выполнять свои плагины, инициализировать приложение или выполнять функции. Я получаю начальный gap_init:3, а затем разрыв:[0, ошибки "CoreAndroid", так как он не проходит через скрипт. При поиске исправления столкнулись с этими возможными исправлениями и предприняли корректирующие действия.
1. Ссылка cordova.js из index.html. Нет эффекта 2. Синхронизация библиотек. Плагин Android 3.2.0 в Android Studio. Gradle 4.6, Cordova 8.1.2 Не влияет 3. Убедитесь, что разрешения для геолокации присутствуют в манифесте и получены через JAVA. см код ниже
Я создал приложение с помощью Cordova, используя Windows CLI. затем добавил мои плагины. TTS, геолокация и inAppBrowser. Затем импортировал приложение в Android Studio. Я могу запустить приложение, используя loadUrl (launchUrl), который использует вид по умолчанию, и приложение работает отлично. Мне нужен WebView, потому что мне нужно сегментировать макет WebView в activity_main.xml. Когда я представлю WebView, он не будет установлен на setWebChromeClient. Если я закомментирую setWebChromeClient, приложение запустится, но геолокация не сделает свое дело. Я знаю, что есть также проблема с некоторыми разновидностями WebView, не работающими, как они делали в прошлом. CordovaWebView теперь является интерфейсом, а не модулем, и его веб-просмотр имеет проблемы с WebChromeClient или чем-то еще. Извините, мне нужно перечитать эту ситуацию. У Crosswalk WebView также есть проблемы.
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// enable Cordova apps to be started in the background
Bundle extras = getIntent().getExtras();
if (extras != null && extras.getBoolean("cdvStartInBackground", false)) {
moveTaskToBack(true);
}
if (checkCallingPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "Permission was previously granted", Toast.LENGTH_LONG).show();
runHistOrigin();
} else {
if (shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_COARSE_LOCATION)) {
Toast.makeText(this, "Permission is required to allow GPS to track your current position.",
Toast.LENGTH_LONG).show();
}
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},1 );
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,int[] grantReaults){
if (requestCode == 1) {
PackageManager pm = this.getPackageManager();
int hasPerm = pm.checkPermission(
android.Manifest.permission.ACCESS_COARSE_LOCATION,
this.getPackageName());
if (hasPerm != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "Permission WAS NOT GRANTED.", Toast.LENGTH_LONG).show();
}
if (grantReaults[0] == PackageManager.PERMISSION_GRANTED) {
//Toast.makeText(this, "Permission was granted.", Toast.LENGTH_LONG).show();
runHistOrigin();
} else {
Toast.makeText(this, "Permission was not granted", Toast.LENGTH_SHORT).show();
runHistOrigin();
}
} else {
super.onRequestPermissionsResult(requestCode, permissions, grantReaults);
}
}
public class GeoWebChromeClient extends WebChromeClient {
@Override
public void onGeolocationPermissionsShowPrompt(String origin, android.webkit.GeolocationPermissions.Callback callback) {
callback.invoke(origin, true, false);
}
}
public class GeoWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
}
public void runHistOrigin() {
mWebView = findViewById(R.id.webview);
//adView1 = findViewById(R.id.adView);
//AdRequest adRequest = new AdRequest.Builder().build();
//adView1.loadAd(adRequest);
mWebView.setWebChromeClient(new GeoWebChromeClient());
mWebView.setWebViewClient(new GeoWebViewClient());
WebSettings webSettings = mWebView.getSettings();
webSettings.setDomStorageEnabled(true);
webSettings.setJavaScriptEnabled(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setGeolocationEnabled(true);
//loadUrl(launchUrl);
mWebView.loadUrl(launchUrl);
}
}
Кто-нибудь знает, почему cordova/phonegap не выполняется с помощью android.webkit.WebView.
Ничего не отображается в стековой трассировке.