如何处理 Android 6.0 的 ACCESS_FINE_LOCATION 权限?
How to handle ACCESS_FINE_LOCATION permission on Android 6.0?
当我在 Android 版本 6.0 或更高版本的设备上启动 LocationService 时,出现以下错误:
java.lang.SecurityException: Client must have ACCESS_FINE_LOCATION permission to request PRIORITY_HIGH_ACCURACY locations.
at android.os.Parcel.readException(Parcel.java:1620)
at android.os.Parcel.readException(Parcel.java:1573)
at com.google.android.gms.internal.ni$a$a.a(Unknown Source)
at com.google.android.gms.internal.nj.a(Unknown Source)
at com.google.android.gms.internal.nk.a(Unknown Source)
at com.google.android.gms.internal.nf.a(Unknown Source)
at com.google.android.gms.internal.nf.a(Unknown Source)
at com.google.android.gms.common.api.BaseImplementation$a.b(Unknown Source)
at com.google.android.gms.common.api.c.a(Unknown Source)
at com.google.android.gms.common.api.c.b(Unknown Source)
at com.google.android.gms.internal.nf.requestLocationUpdates(Unknown Source)
at com.google.android.gms.internal.jm.f(Unknown Source)
at com.google.android.gms.common.api.c.gJ(Unknown Source)
at com.google.android.gms.common.api.c.d(Unknown Source)
at com.google.android.gms.common.api.c.onConnected(Unknown Source)
at com.google.android.gms.internal.jm.f(Unknown Source)
at com.google.android.gms.internal.jm.dU(Unknown Source)
at com.google.android.gms.internal.jl$h.b(Unknown Source)
at com.google.android.gms.internal.jl$h.g(Unknown Source)
at com.google.android.gms.internal.jl$b.hy(Unknown Source)
at com.google.android.gms.internal.jl$a.handleMessage(Unknown Source)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5466)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
我已经在Manifest.xml中设置了所需的权限!然后我读到权限在 Android 6.0 上有所不同,但是我如何要求用户接受或设置应用程序所需的权限?
有什么建议吗?
首先检查权限是否已经被授予
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.CAMERA}, 108);
return;
} else {
//continueYourTask
}
如果未被授予,它会自动显示一个对话框以授予访问权限,并且在被授予时收到回叫
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case 108:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//continueYourTask
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
当我在 Android 版本 6.0 或更高版本的设备上启动 LocationService 时,出现以下错误:
java.lang.SecurityException: Client must have ACCESS_FINE_LOCATION permission to request PRIORITY_HIGH_ACCURACY locations. at android.os.Parcel.readException(Parcel.java:1620) at android.os.Parcel.readException(Parcel.java:1573) at com.google.android.gms.internal.ni$a$a.a(Unknown Source) at com.google.android.gms.internal.nj.a(Unknown Source) at com.google.android.gms.internal.nk.a(Unknown Source) at com.google.android.gms.internal.nf.a(Unknown Source) at com.google.android.gms.internal.nf.a(Unknown Source) at com.google.android.gms.common.api.BaseImplementation$a.b(Unknown Source) at com.google.android.gms.common.api.c.a(Unknown Source) at com.google.android.gms.common.api.c.b(Unknown Source) at com.google.android.gms.internal.nf.requestLocationUpdates(Unknown Source) at com.google.android.gms.internal.jm.f(Unknown Source) at com.google.android.gms.common.api.c.gJ(Unknown Source) at com.google.android.gms.common.api.c.d(Unknown Source) at com.google.android.gms.common.api.c.onConnected(Unknown Source) at com.google.android.gms.internal.jm.f(Unknown Source) at com.google.android.gms.internal.jm.dU(Unknown Source) at com.google.android.gms.internal.jl$h.b(Unknown Source) at com.google.android.gms.internal.jl$h.g(Unknown Source) at com.google.android.gms.internal.jl$b.hy(Unknown Source) at com.google.android.gms.internal.jl$a.handleMessage(Unknown Source) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5466) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
我已经在Manifest.xml中设置了所需的权限!然后我读到权限在 Android 6.0 上有所不同,但是我如何要求用户接受或设置应用程序所需的权限?
有什么建议吗?
首先检查权限是否已经被授予
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.CAMERA}, 108);
return;
} else {
//continueYourTask
}
如果未被授予,它会自动显示一个对话框以授予访问权限,并且在被授予时收到回叫
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case 108:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//continueYourTask
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}