【问题标题】:android studio sdk v23 webview get geolocationandroid studio sdk v23 webview 获取地理位置
【发布时间】:2017-04-04 16:11:26
【问题描述】:

关于这个问题的另一个问题。很抱歉是多余的,但我到处都看过,但我仍然无法让它工作。我的网页 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>

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

【问题讨论】:

    标签: android html webview geolocation


    【解决方案1】:

    假设您使用 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 开始,权限处理发生了变化。您应该在运行时明确地向用户请求对关键功能(如位置)的许可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多