我正在尝试为用户获取最后知道的位置。为此,我已经在manifest xml文件中声明了以下权限。
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
但是在代码中,它一直显示以下错误:
代码应明确检查是否有权限。
我没有看到这一点,但无论如何我添加了以下检查。
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
这会停止显示错误,但是当我运行应用程序时,它最终会返回。我遗失了什么许可?自从我在Android上工作了一段时间后,我不记得必须处理这些额外的检查。清单许可声明就足够了。请告知我缺少的东西。
代码:
LocationManager locationManager;
String provider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
provider = locationManager.getBestProvider(new Criteria(), false);
Location location = null;
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
Log.i("location", "returned"); // This log will occur
return; //return will occur
}
location = locationManager.getLastKnownLocation(provider); //this is the line that requires permission
Log.i("location", "This log will not occur");
}
答案 0 :(得分:3)
在Android 6.0中,权限授予和访问权限已更改。在清单中添加权限不再保证访问权限。用户现在有权在他选择时撤销并授予您权限。
您需要向用户明确请求某些权限。用户可以选择授予您权限,然后继续工作。用户也可以选择拒绝请求,然后你必须弄清楚如何处理这种情况。
授予的许可不是最终的。用户仍可以在以后稍后撤消权限,因此您必须跟踪您的权限。如果权限对应用程序的性能至关重要,请帮助用户了解在请求权限时应用程序正常运行(通过使用对话框/弹出窗口)必须具有权限。
为了更好地理解read this
您所做的就是检查您是否拥有必要的许可。 request for the permission
不是打破方法