为什么android.webkit.WebView不允许phonegap执行其插件或初始化本地资源html

时间:2018-10-12 14:11:34

标签: android cordova webview webchromeclient

我有一个WebView,它将不允许phonegap执行其插件,初始化应用程序或执行功能。我得到一个初始的gap_init:3,然后是gap:[0,“ ​​CoreAndroid”错误,因为它无法通过脚本。 在寻找修补程序时,遇到了这些潜在的修补程序并已采取纠正措施。
1.从index.html引用cordova.js。没有效果 2.同步库。将Android 3.2.0插件插入Android Studio。 Gradle 4.6,Cordova 8.1.2无效 3.确保清单中存在对地理定位的权限,并且可以通过JAVA获得。参见下面的代码

我使用Windows CLI使用Cordova创建了该应用程序。然后添加我的插件。 TTS,地理位置和inAppBrowser。然后将应用程序导入Android Studio。 我可以使用loadUrl(launchUrl)运行该应用程序,该程序使用默认的View,并且该应用程序可以完美运行。但是,我需要一个WebView,因为我需要在activity_main.xml中分割WebView的布局。当我介绍WebView时,它将在setWebChromeClient上失败。如果我将setWebChromeClient注释掉,则该应用将执行,但是地理定位将无法完成任务。 我知道某些版本的WebView不能像过去那样起作用。 CordovaWebView现在是一个接口,而不是一个模块,并且其Webview出现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);

}
}

有人知道为什么不使用android.webkit.WebView执行cordova / phonegap吗?

在堆栈跟踪中什么都没有显示。

0 个答案:

没有答案