关于这个问题的另一个问题。抱歉是多余的,但我看起来无处不在,但我仍然无法让它工作。我的网页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>
我卡住了卡住了。开始怀疑这是否可能......如何让人们开始工作?!?!?!?
答案 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开始,权限处理已更改。您应该在运行时明确地询问用户对关键功能(如位置)的许可。