当应用启动时,会运行此代码,请求权限。
public void requestPermission()
{
ActivityCompat.requestPermissions(this,
new String[] { android.Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION },
Integer.parseInt(this.getString(R.string.LOCATION_REQUESTCODE)));
}
然后,用户可以接受或拒绝该权限。然后它运行以下代码。
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults)
{
if(requestCode == Integer.parseInt(this.getString(R.string.LOCATION_REQUESTCODE)))
{
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
// permission was granted
// Continue running the application
}
else
{
// permission denied
Toast.makeText(this, R.string.gps_required, Toast.LENGTH_LONG).show();
// Ask again to accept the permissions
requestPermission();
}
}
}
因此,如果请求被拒绝,则Toast会显示用户需要接受它才能运行应用程序(因为需要GPS坐标),并且应用程序再次向用户请求权限。
但问题是:在拒绝时,弹出窗口又来了。如果我拒绝5次,那么我想接受,我需要在所有弹出窗口消失之前单击“接受”5次。
知道造成这种情况的原因是什么?接受后为什么还有权限弹出窗口?
答案 0 :(得分:0)
找到了答案!
ActivityCompat.requestPermissions(this,
new String[] { android.Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION },
Integer.parseInt(this.getString(R.string.LOCATION_REQUESTCODE)));
我正在请求2个权限:android.Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION
这就是弹出窗口出现两次的原因。
解决方法是删除android.Manifest.permission.ACCESS_COARSE_LOCATION
,因为Manifest.permission.ACCESS_FINE_LOCATION
已包含该内容。