我正在处理运行时权限,并试图创建一个方法来显示获取权限的权限理由和理由问题是:“变量'requiredPermissions‘是从内部类中访问的,需要声明为final”
这就是我调用该方法的方式:
showRationale(R.string.permission_ACCESS_FINE_LOCATION_rationale, new String[]{Manifest.permission.ACCESS_FINE_LOCATION});这就是方法:
private void showRationale(int rationale, String[] requiredPermissions) {
Snackbar.make(findViewById(R.id.myCoordinatorLayout), rationale, Snackbar.LENGTH_INDEFINITE)
.setAction(R.string.go_grant_permission, new View.OnClickListener() {
@Override
public void onClick(View view) {
// 'requiredPermissions' below causes the problem
ActivityCompat.requestPermissions(MapsActivity.this, requiredPermissions, MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
}
})
.show();
}发布于 2016-07-28 19:18:50
您可以通过接口实现onClick,而不是将此变量设为final。
发布于 2016-07-28 19:19:29
这样如何:
private void showRationale(int rationale, final String[] requiredPermissions) {
Snackbar.make(findViewById(R.id.myCoordinatorLayout), rationale, Snackbar.LENGTH_INDEFINITE)
.setAction(R.string.go_grant_permission, new View.OnClickListener() {
@Override
public void onClick(View view) {
// 'requiredPermissions' below causes the problem
ActivityCompat.requestPermissions(MapsActivity.this, requiredPermissions, MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
}
})
.show();
}发布于 2016-07-28 19:20:24
问题是局部变量(和方法参数)必须是final才能在像OnClickListener这样的内部类中被访问。因此,您应该在参数声明之前添加final关键字。要执行此操作,请更改此行
private void showRationale(int rationale, String[] requiredPermissions) {至
private void showRationale(int rationale, final String[] requiredPermissions) {请阅读有关此主题here的更多信息。
https://stackoverflow.com/questions/38634805
复制相似问题