2016-03-16 46 views
13

這裏是我的代碼,它完美地工作檢查Android權限的方法

if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 
    mMap.setMyLocationEnabled(true); 
} 

但我不喜歡在每次檢查這麼大的代碼,並希望將其委託給我的實用工具類的方法。

if (Utils.hasMapLocationPermissions(getActivity())) { 
    mMap.setMyLocationEnabled(true); 
} 

setMyLocationEnabled有註釋@RequiresPermission這樣我不能把它委託給一個方法,因爲皮棉編輯顯示它作爲錯誤

是否有一些註釋寫在我的實用方法和抑制lint?

像這樣的事情

@ChecksPermission 
public boolean hasMapLocationPermissions(Activity activity) { 
    return // my checking logic.. 
} 
+0

嘗試把'setMyLocationEnabled'在'試穿catch'和處理'SecurityException'。應該工作沒有註釋。 – Rohit5k2

+0

該代碼仍然很大,看起來很醜。我想用整齊的小代碼解決。 –

回答

28

您可以重命名你的方法checkLocationPermission(Activity activity)。我發現您的方法名稱必須以「check」開頭,並以「Permission」結束以傳遞Lint警告。

例如:

public static boolean checkLocationPermission(Context context) { 
    return ActivityCompat.checkSelfPermission(context, 
      Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED 
      && ActivityCompat.checkSelfPermission(context, 
      Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED; 
} 
+2

優秀的答案!我知道有這樣的事情。 謝謝。現在我的代碼看起來很棒,也沒有lint警告。 –

+0

哈哈,用這種方式盜用皮特真是太好了 –

1

什麼我還沒做的是創建一個類,裏面做一個構造函數,如下所示:

public MarshMallowPermission(Activity activity) { 
     this.activity = activity; 
    } 

    public boolean checkPermissionForRecord() { 
     int result = ContextCompat.checkSelfPermission(activity, Manifest.permission.RECORD_AUDIO); 
     if (result == PackageManager.PERMISSION_GRANTED) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

然後你內心類打電話給你的功能,如

if (!marshMallowPermission.checkPermissionForRecord()) { 
     marshMallowPermission.requestPermissionForRecord(); 
    } 

和在你的班級裏面調用函數之前做這個

MarshMallowPermission marshMallowPermission = new MarshMallowPermission(getActivity()); 
+1

MarshMallowPermission不是很合適的名字,因爲我們在上層API中也有這個特性。 –

+0

MarshMallowPermission是一個給定的名稱,以便您能夠理解該類正在做什麼。 –

+0

@IoaneSharvadze:如果答案是根據你的需要,請接受並投票我的答案。謝謝 –

12

您可以通過@SuppressWarnings("MissingPermission")註釋你的方法同時在編輯器和皮棉報告制止這種錯誤,或者您也可以通過把//noinspection MissingPermission上面這條線取消錯誤只是一個單獨的語句。

例如:

@SuppressWarnings("MissingPermission") 
public boolean hasMapLocationPermissions(Activity activity) { 
    // your checking logic 
} 

或者:

if (Utils.hasMapLocationPermissions(getActivity())) { 
    //noinspection MissingPermission 
    mMap.setMyLocationEnabled(true); 
} 
+0

好的答案,會等幾天,如果這是最好的答案,我會給你賞金。 謝謝。 –