Почему android.webkit.WebView не позволяет PhoneGap выполнять свои плагины или инициализировать локальный ресурс HTML - PullRequest
0 голосов
/ 12 октября 2018

У меня есть 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.

В стековой трассировке ничего не отображается.

...