2016-07-28 37 views
0

我正在使用运行时权限并尝试使方法显示权限理由/ s以获取权限/ s和基本原理/ s 的问题是: “变量requiredPermissions'从内部类中访问,需要被声明为final”Android Studio:变量'requiredPermissions'是从内部类访问的,需要声明为最终的

这就是我如何调用该方法:

 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(); 
} 
+0

在'String [] requiredPermissions':'final String [] requiredPermissions'之前添加'final'。 –

回答

0

您可以通过接口实现onClick,而不是最终使此变量。

0

这个怎么样:

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(); 
} 
0

的问题是局部变量(和方法参数)必须final到内部类可以访问像你OnClickListener。所以你应该在参数声明之前添加一个final关键字。要做到这一点,这条线

private void showRationale(int rationale, String[] requiredPermissions) { 

改变

private void showRationale(int rationale, final String[] requiredPermissions) { 

了解更多关于这个话题here