嵌入式谷歌地图无法在 WebView 中获取当前位置
Posted
技术标签:
【中文标题】嵌入式谷歌地图无法在 WebView 中获取当前位置【英文标题】:Embedded Google Map can't get current location in WebView 【发布时间】:2013-05-05 08:39:57 【问题描述】:我遵循了这个教程:http://android-er.blogspot.com/2013/03/embed-google-map-in-webview.html
我正在尝试仅在 WebView 中使用 Google 地图,但它无法获取我当前的位置。我在 WebView 上启用了 javascript。我还需要启用什么?
有人知道为什么会这样吗?它不应该提示我使用我当前的位置吗?
请注意,我对使用 MapView 作为替代方案不感兴趣。我试图找出我需要在 WebView 或设备的位置服务上设置什么?
【问题讨论】:
认真的吗?没有其他人遇到过这个问题?? 嗨,Darren,我遇到了同样的问题,@Kumait 的解决方案已解决。您应该尝试相同的解决方案,如果可行,请接受它作为答案。 【参考方案1】:您应该允许 web 视图通过覆盖方法 onGeolocationPermissionsShowPrompt
来访问您的位置,如下所示:
webView.setWebChromeClient(new WebChromeClient()
@Override
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback)
callback.invoke(origin, true, false);
);
【讨论】:
【参考方案2】:在 API 5.x 及更低版本上,您将需要
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
在你的AndroidManifest.xml
。
但要允许 API 6.0+ 上的地理定位权限,您必须request the permission at runtime。
为此,请使用
private String mGeolocationOrigin;
private GeolocationPermissions.Callback mGeolocationCallback;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// other setup
myWebView.setWebChromeClient(new MyWebChromeClient());
private WebChromeClient mWebChromeClient = new WebChromeClient()
@Override
public void onGeolocationPermissionsShowPrompt(String origin,
GeolocationPermissions.Callback callback)
// Geolocation permissions coming from this app's Manifest will only be valid for devices with API_VERSION < 23.
// On API 23 and above, we must check for permission, and possibly ask for it.
final String permission = Manifest.permission.ACCESS_FINE_LOCATION;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M ||
ContextCompat.checkSelfPermission(MainActivity.this, permission) == PackageManager.PERMISSION_GRANTED)
// we're on SDK < 23 OR user has already granted permission
callback.invoke(origin, true, false);
else
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, permission))
// user has denied this permission before and selected [/] DON'T ASK ME AGAIN
// TODO Best Practice: show an AlertDialog explaining why the user could allow this permission, then ask again
else
// ask the user for permissions
ActivityCompat.requestPermissions(MainActivity.this, new String[] permission, RP_ACCESS_LOCATION);
mGeolocationOrigin = origin;
mGeolocationCallback = callback;
并接收结果:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode)
case RP_ACCESS_LOCATION:
boolean allow = false;
if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
// user has allowed these permissions
allow = true;
if (mGeolocationCallback != null)
mGeolocationCallback.invoke(mGeolocationOrigin, allow, false);
break;
在你的活动中。
【讨论】:
【参考方案3】:您可以通过 Google 地图试用 GreenDroid。
检查一下:https://github.com/cyrilmottier/GreenDroid
【讨论】:
【参考方案4】:您必须启用android.permission.ACCESS_FINE_LOCATION
和android.permission.INTERNET
,
创建LocationManager
实例和LocationListener
实例
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
LocationListener locationListener = new MyLocationListener();
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, locationListener);
并添加onLocationChanged(Location loc)
方法,在其中有你的loc
生成经度和纬度(String long = loc.getLongitude(); String lat = loc.getLatitude();
)
现在使用long, lat
生成您的mapPath
字符串并继续生成WebView
您可以将其用于参考:http://www.rdcworld-android.blogspot.in/2012/01/get-current-location-coordinates-city.html
【讨论】:
我认为我没有说清楚,但我提供的链接预计可以开箱即用。对于我的具体问题,我正在创建一个使用 JavaScript Google Maps API 的移动网站,因此我无法控制原生 WebView。以上是关于嵌入式谷歌地图无法在 WebView 中获取当前位置的主要内容,如果未能解决你的问题,请参考以下文章