Android WebView 地理位置
Posted
技术标签:
【中文标题】Android WebView 地理位置【英文标题】:Android WebView geolocation 【发布时间】:2017-08-04 15:23:29 【问题描述】:我知道这个问题已经被问了很多时间,但我找不到任何帮助。
我正在尝试构建一个加载使用地理位置的网站的应用。
当应用程序加载时,它应该打开一个谷歌地图,上面有我的位置。在网络浏览器上它工作正常。
我尝试访问的链接是https://pas.irsglobal.net/test/
我的代码如下。
//MainActivity.java
package za.co.opexsolutions.www.panicapp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.GeolocationPermissions;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity
/**
* WebViewClient subclass loads all hyperlinks in the existing WebView
*/
public class GeoWebViewClient extends WebViewClient
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
// When user clicks a hyperlink, load in the existing WebView
view.loadUrl(url);
return true;
/**
* WebChromeClient subclass handles UI-related calls
* Note: think chrome as in decoration, not the Chrome browser
*/
public class GeoWebChromeClient extends WebChromeClient
@Override
public void onGeolocationPermissionsShowPrompt(String origin,
GeolocationPermissions.Callback callback)
// Always grant permission since the app itself requires location
// permission and the user has therefore already granted it
callback.invoke(origin, true, false);
WebView wv;
String mypage = "https://pas.irsglobal.net/test/";
String mypage_error = "file:///android_asset/mypage_error/index.html";
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wv = (WebView) findViewById(R.id.wv);
wv.getSettings().setjavascriptCanOpenWindowsAutomatically(true);
wv.setWebViewClient(new GeoWebViewClient());
wv.getSettings().setJavaScriptEnabled(true);
wv.getSettings().setGeolocationEnabled(true);
wv.setWebChromeClient(new GeoWebChromeClient());
wv.setFocusable(true);
wv.setFocusableInTouchMode(true);
wv.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
wv.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
wv.getSettings().setDomStorageEnabled(true);
wv.getSettings().setDatabaseEnabled(true);
wv.getSettings().setAppCacheEnabled(true);
wv.setWebChromeClient(new WebChromeClient()
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback)
// callback.invoke(String origin, boolean allow, boolean remember);
callback.invoke(origin, true, false);
);
wv.loadUrl(mypage);
wv.setWebViewClient(new WebViewClient()
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
wv.loadUrl(mypage_error);
);
//Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
<uses-permission android:name="android.permission.LOCATION_HARDWARE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<application
android:allowBackup="true"
android:icon="@mipmap/shipping"
android:label="@string/app_name"
android:roundIcon="@mipmap/shipping"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".HomeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MainActivity"></activity>
</application>
【问题讨论】:
请看:How do I avoid misusing tags? 【参考方案1】:好的,经过一段时间的搜索可能是什么问题,我希望这对其他人也有帮助。 在这种情况下,问题不是我的代码,而是我在模拟器上运行的 Android 版本。 (我使用的是 Android 7 Nougat)。
从 Android 6.0(API 级别 23)开始,用户在应用运行时授予应用权限,而不是在安装应用时。
如果设备运行 Android 6.0 或更高版本,并且您的应用的目标 SDK 为 23 或更高版本:应用必须在清单中列出权限,并且必须在应用运行时请求其所需的每个权限。用户可以授予或拒绝每个权限,即使用户拒绝权限请求,应用程序也可以继续以有限的功能运行。
寻求全面帮助Please Click Here
【讨论】:
以上是关于Android WebView 地理位置的主要内容,如果未能解决你的问题,请参考以下文章