我对自己的代码有疑问。
所以,我正在使用nativescript-geolocation获取我的位置。
在component.ts中,我有以下代码:
import * as geoLocation from "nativescript-geolocation";
currentGeoLocation: any;
ngOnInit(): void {
geoLocation.isEnabled().then(enabled => {
if (!enabled) {
geoLocation.enableLocationRequest().then(() => geoLocation.watchLocation(location => {
this.currentGeoLocation = location;
this.mapView.longitude = this.currentGeoLocation.longitude;
this.mapView.latitude = this.currentGeoLocation.latitude;
this.mapView.zoom = 15;
console.log(this.currentGeoLocation)
}, error => {
alert(error);
}, {
desiredAccuracy: 3,
updateDistance: 10,
minimumUpdateTime: 1000 * 1
}));
} else {
geoLocation.watchLocation(location => {
this.currentGeoLocation = location;
this.mapView.longitude = this.currentGeoLocation.longitude;
this.mapView.latitude = this.currentGeoLocation.latitude;
this.mapView.zoom = 15;
console.log(this.currentGeoLocation)
}, error => {
alert(error);
}, {
desiredAccuracy: 3,
updateDistance: 10,
minimumUpdateTime: 1000 * 1
});
}
});
}
在AndroidMainfest.xml中,我有:
<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.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
在安装应用程序时显示error
答案 0 :(得分:0)
在Android M中,您需要请求运行时权限
答案 1 :(得分:0)
Android体系结构
根据Android文档:
Android 6.0 Marshmallow引入了新的权限模型,该模型可以 应用在运行时(而不是之前)向用户请求权限 安装。支持新模型的应用请求权限 当应用实际需要受以下内容保护的服务或数据时: 服务。尽管这并不会(有必要)改变整个应用程序 行为,确实会造成一些与敏感方式有关的变化 处理用户数据:
如果用户运行的是Android 6.0(API级别23)或更高版本,则用户在运行应用程序时必须向您的应用授予权限。 因此,您需要添加运行时权限。
import { Component, OnInit } from "@angular/core";
import * as Permissions from "nativescript-permissions";
declare var android: any;
@Component({
selector: "ns-app",
templateUrl: "app.component.html",
})
export class AppComponent {
public getCameraPermission() {
Permissions.requestPermission(android.Manifest.permission.CAMERA, "Needed for connectivity status").then(() => {
console.log("Permission granted!");
}).catch(() => {
console.log("Permission is not granted (sadface)");
});
}
}
答案 2 :(得分:0)
1)在build.gradle文件中添加以下实现。
实现'com.karumi:dexter:5.0.0'
2)添加以下代码,以获取用户想要的位置权限。
Dexter.withActivity(activity)
.withPermissions(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION)
.withListener(new MultiplePermissionsListener() {
@Override
public void onPermissionsChecked(MultiplePermissionsReport report) {
Log.i(TAG, "onPermissionsChecked: ");
// check if all permissions are granted
if (report.areAllPermissionsGranted()) {
// All permissions are granted!
// Do what you want to do.
} else {
// Some permissions are not granted!
Toast.makeText(activity, "Permission not granted", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
token.continuePermissionRequest();
}
}).
withErrorListener(new PermissionRequestErrorListener() {
@Override
public void onError(DexterError error) {
}
})
.onSameThread()
.check();
Manifest.permission.ACCESS_FINE_LOCATION 和 Manifest.permission.ACCESS_COARSE_LOCATION 都用于获取位置。
功能:-
if (report.areAllPermissionsGranted()) {
// Write code to get Location.
}
此功能用于检查用户是否授予权限。如果是,那么它将进入。然后编写您的代码以从用户那里获取位置。