我想在我的项目中使用Google地图。为此:
首先,我安装并配置插件>> tns plugin add nativescript-google-maps-sdk
,该插件对我有用。
第二秒,我也要显示在Google地图中以及当前位置,为此我安装了>> tns plugin add nativescript-geolocation
在AndroidMainfest.xml
中添加
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
<supports-screens />
<uses-sdk />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<application>
.......
</application>
</manifest>
和ts组件
onMapReady(event) {
this.mapView = event.object;
this.ws.mobile_base_pharmacyGetAll().subscribe(
items => {
console.log(items)
this.items = items;
if (items !== undefined || items !== undefined) {
for (let i = 0; i < this.items.length; i++) {
var marker = new Marker();
marker.position = Position.positionFromLatLng(this.items[i].latitude, this.items[i].longitude);
marker.title = this.items[i].name;
marker.snippet = this.items[i].address1;
marker.userData = { index: 1 };
this.mapView.addMarker(marker);
this.mapView.myLocationEnabled = true;
}
}
},
err => console.error('err', err),
() => console.log('error')
);
}
Android 5.1.1中的此代码非常有效。在Android 7及更高版本中,此功能无法正常运行。错误:
JS:错误错误:java.lang.SecurityException:我的位置需要 权限ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION JS:
com.google.maps.api.android.lib6.impl.bg.c(:com.google.android.gms.dynamite_mapsdynamite @ 17785050 @ 17.7.85 (040406-253824076):545)JS:
com.google.android.gms.maps.internal.m.a(:com.google.android.gms.dynamite_mapsdynamite @ 17785050 @ 17.7.85 (040406-253824076):361)JS:
hp.onTransact(:com.google.android.gms.dynamite_mapsdynamite @ 17785050 @ 17.7.85 (040406-253824076):4)JS:
android.os.Binder.transact(Binder.java:499)JS:
com.google.android.gms.internal.maps.zza.transactAndReadExceptionReturnVoid(未知 来源)JS:
com.google.android.gms.maps.internal.zzg.setMyLocationEnabled(未知 来源)JS:
com.google.android.gms.maps.GoogleMap.setMyLocationEnabled(未知 源代码)JS:com.tns.Runtime.callJSMethodNative(本地方法)JS: com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1203)JS:
com.tns.Runtime.callJSMethodImpl(Runtime.java:1083)JS:
com.tns.Runtime.callJSMethod(Runtime.java:1070)
请问我有什么建议,有什么问题以及如何解决?我在google中找不到任何解决方案。
谢谢!
更新:
我更改了它,但没有任何变化,存在错误。
答案 0 :(得分:0)
从Android 6.0开始,用户必须在运行时批准权限。在这里您可以找到官方的Google Developer documentation
用于处理运行时权限的有用的反应式库是:https://github.com/tbruyelle/RxPermissions
答案 1 :(得分:0)
从Android 6.0(API级别23)开始,即使该应用程序定位于较低的API级别,用户也可以随时从任何应用程序撤消权限。
将此代码添加到您的MainActivity中。
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) ==
PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) ==
PackageManager.PERMISSION_GRANTED) {
googleMap.setMyLocationEnabled(true);
googleMap.getUiSettings().setMyLocationButtonEnabled(true);
} else {
ActivityCompat.requestPermissions(this, new String[] {
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION },
TAG_CODE_PERMISSION_LOCATION);
}
查看详细信息https://developer.android.com/training/permissions/requesting.html