2016-03-16 16 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

が ' - catch'を試してみて、' SecurityException'を扱うには、 'setMyLocationEnabled'を入れてみてください。注釈なしで作業する必要があります。 – Rohit5k2

+0

コードはまだ大きく、醜いです。私は素敵な小さなコードで解決したい。 –

答えて

28

あなたはcheckLocationPermission(Activity activity)としてあなたの方法を変更することができます。私は、あなたのメソッドの名前が "チェック"で始まり、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

優秀な回答!私はそれのようなものがあることを知っていた。 ありがとうございます。さて、私のコードはすばらしく見えるし、リント警告もありません。 –

+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を置くことによって、1つだけの文のエラーを抑制することができます。例えば

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

または:

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

良い答え、数日待って、それが最高の答えなら、私はあなたに恩恵を与えるでしょう。 ありがとうございます。 –

関連する問題