2016-07-28 40 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