android studio sdk v23 webview获取地理位置

时间:2016-11-21 09:51:02

标签: android html5 webview geolocation

关于这个问题的另一个问题。抱歉是多余的,但我看起来无处不在,但我仍然无法让它工作。我的网页navigator.geolocation函数返回此错误:应用程序没有足够的地理定位权限。它不会询问用户是否允许权限。一切都适用于我桌面上的不同浏览器(chrome,ff,safari,即10 +)。

我正在android studio中运行模拟器...手机类型是nexus 5 api 23(android 6.0)。

以下是我现在为此提供的代码:

//我的mainActivity.java文件:

  @Override
   protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mWebView = (WebView) findViewById(R.id.activity_main_webview);
    WebSettings mWebSettings = mWebView.getSettings();
    mWebSettings.setJavaScriptEnabled(true);
    String userAgent = mWebView.getSettings().getUserAgentString() ;
    mWebSettings.setUserAgentString(userAgent);

    mWebSettings.setBuiltInZoomControls(true);
    mWebSettings.setAppCacheEnabled(true);
    mWebSettings.setDatabaseEnabled(true);
    mWebSettings.setDomStorageEnabled(true);
    mWebSettings.setAllowFileAccess(true);
    mWebSettings.setAllowContentAccess(true);
    mWebSettings.setGeolocationEnabled(true);
    mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);

    mWebView.clearCache(true);
    mWebView.clearHistory();
    mWebView.clearView();
    mWebView.loadUrl("https://mywebsite.com");


    mWebView.setWebChromeClient(new WebChromeClient()
    {
        @Override
        public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
            callback.invoke(origin, true, false);
        }

etc...

//我的android清单文件:

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

我卡住了卡住了。开始怀疑这是否可能......如何让人们开始工作?!?!?!?

1 个答案:

答案 0 :(得分:0)

假设你使用的是AppCompatActivity,而不是普通的活动,这就是诀窍:

@Override
   protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
//your code
        ActivityCompat.requestPermissions(getActivity(), new String[]{
                android.Manifest.permission.ACCESS_COARSE_LOCATION,
                android.Manifest.permission.ACCESS_FINE_LOCATION
        }, 0);
//your code
}

从Android 6,API级别23开始,权限处理已更改。您应该在运行时明确地询问用户对关键功能(如位置)的许可。