Android 6.0位置权限
我正在尝试实现位置的运行时权限。实施情况如下:Android 6.0位置权限,android,android-permissions,android-6.0-marshmallow,Android,Android Permissions,Android 6.0 Marshmallow,我正在尝试实现位置的运行时权限。实施情况如下: public class MyLocationManager implements android.location.LocationListener, ActivityCompat.OnRequestPermissionsResultCallback { private static LocationManager m_locationManager; private static final int REQUEST_COARS
public class MyLocationManager implements android.location.LocationListener, ActivityCompat.OnRequestPermissionsResultCallback {
private static LocationManager m_locationManager;
private static final int REQUEST_COARSE_LOCATION = 999;
private static final int REQUEST_FINE_LOCATION = 998;
private String provider;
private Context mContext;
public void startListenLocation(Context context) {
this.mContext = context;
m_locationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
...
if (Build.VERSION.SDK_INT >= 23 && ((ContextCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION)) != PackageManager.PERMISSION_GRANTED)) {
ActivityCompat.requestPermissions((Activity) mContext, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_COARSE_LOCATION) ;
} else {
Location location = m_locationManager.getLastKnownLocation(provider);
}
...
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_COARSE_LOCATION: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
//compiler error on the following line
Location myLocation = m_locationManager.getLastKnownLocation(provider);
} else {
//Permission denied
}
return;
}
}
}
}
在调用
onRequestPermissionResult()
中的getLastKnownLocation()
时出现语法错误。它告诉我再次检查权限,即使我已经这样做了。因此,有人能告诉我这里的实现有什么问题吗方法getLastKnownLocation
被注释为:
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
因此,您会收到警告:
调用需要用户可能拒绝的权限:代码应显式检查权限是否可用(使用checkPermission)或显式处理潜在的SecurityException
有两个选项可以避免警告:
getLastKnownLocation
:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_COARSE_LOCATION:
{
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
//noinspection ResourceType
Location myLocation = m_locationManager.getLastKnownLocation(provider);
} else {
//Permission denied
}
return;
}
}
}
GetLastKnownLocationFallowed
:
public void startListenLocation(Context context) {
this.mContext = context;
m_locationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
if (!getLastKnownLocationIfAllowed())
ActivityCompat.requestPermissions((Activity) mContext, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_COARSE_LOCATION);
}
private boolean getLastKnownLocationIfAllowed() {
if (ContextCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
Location location = m_locationManager.getLastKnownLocation(provider);
return true;
}
return false;
}
在您的活动中:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUEST_COARSE_LOCATION: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
myLocationManager.getLastKnownLocationIfAllowed();
} else {
//Permission denied
}
return;
}
}
}
将此方法添加到您的活动中并使用
public boolean isStoragePermissionGranted() {
if (Build.VERSION.SDK_INT >= 23) {
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {return true;
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
return false;
}
}
else { //permission is automatically granted on sdk<23 upon installation
flag=true;
return true;
}
}
public boolean isstoragepermissiongrated(){
如果(Build.VERSION.SDK_INT>=23){
if(checkSelfPermission(Manifest.permission.ACCESS\u FINE\u位置)
==PackageManager.PERMISSION_grated){返回true;
}否则{
ActivityCompat.requestPermissions(这个新字符串[]{Manifest.permission.ACCESS\u FINE\u LOCATION},1);
返回false;
}
}
else{//在sdk上自动授予权限