40

私はこのコード行は、メソッドの内部で、私はAndroidの実行時のアクセス権をチェックしないこのメソッドを呼び出す前にあるアンドロイドスタジオ - セキュリティ例外の警告を削除

Location location = LocationServices.FusedLocationApi.getLastLocation(
      mGoogleApiClient); 

を介してユーザの位置を取得しています。アクセス許可がユーザーから利用可能な場合にのみ、このメソッドを呼び出します。コードは完璧に動作しています。

問題は、Android Studioではこの行にエラーが表示され、この関数を呼び出す前に既にチェックしたことを認識していないということです。

Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with `checkPermission`) or explicitly handle a potential `SecurityException` 

今どのように私はこの警告を削除しますか?私は既にパーミッションをチェックしており、この警告を取り除くだけでもう一度チェックしたくありません。 @SuppressWarnings()を追加しようとしましたが、これに渡す正確な文字列はわかりません。 @SuppressWarnings({"all"})は機能しますが、明らかに推奨されていません。

この警告を削除するにはどうすればよいですか?

EDIT 1:これは私の正確なコードである -

private void checkPermissions() { 
    if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) 
      == PackageManager.PERMISSION_GRANTED) 
     getLocation(); //Method called if I have permission 
} 

private void getLocation() { 
    //Android studio shows warning at this line. 
    Location location = LocationServices.FusedLocationApi.getLastLocation(
      mGoogleApiClient); 
} 

しかし、私はのgetLocation内()メソッドを許可チェックを入れた場合、警告が消えます。 @SuppressWarnings({"MissingPermission"})は機能しませんでした。

EDIT 2:私は警告を抑制するための唯一の方法であることを発見した -

コードの特定の部分の上にこのコメントの追加 -

//noinspection ResourceType 

またはこれを追加することを - あなたが探している

@SuppressWarnings({"ResourceType"}) 
+0

私の編集した回答がうまく機能している場合は、それを合格とマークしてください。 – Renascienza

答えて

108

は(明瞭さを向上させるために更新):

@Override 
@SuppressWarnings({"MissingPermission"}) 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    if (LOCATION_REQUEST_CODE == requestCode) { 
     if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

      lastLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient); 


     } 
} 

EDITED:

正しいリントルールはMissingPermissionですが、一部の人にそれを置き忘れるバグがあるようです。

@SuppressWarnings({"ResourceType"})も試してください。

+2

これは機能しません。 –

+0

本当ですか? 私は解明のための答えを更新しました。このコードは、私のAndroid Studio(2.0プレビュー7)で、gradleやlintの警告なしに解析され、コンパイルされます。 – Renascienza

+0

マニフェストファイルにも許可が宣言されていますか? – Renascienza

6

あなたはこの糸くずの警告を無視しようとしている場合は、このインラインを行うことができ、次のいずれか

//noinspection MissingPermission 
Location lastLocation = FusedLocationApi.getLastLocation(locationClient); 

またはメソッドレベルで

@SuppressWarnings({"MissingPermission"}) 
public void toggleGPS(boolean enableGPS) { 
    ... 
} 
0

あなたが @SuppressWarnings({"MissingPermission"})を生成するために、Androidのメーカーの検査を使用することができますあなたの方法やクラスのため

android studio missing permission check

関連する問題