web-dev-qa-db-ja.com

Android Studio-セキュリティ例外の警告を削除

ユーザーの位置を取得しています

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

このコード行はメソッド内にあり、このメソッドを呼び出す前にAndroid実行時の権限を確認します。権限がユーザーから利用できる場合のみ、このメソッドを呼び出します。コードは完全に機能しています。 。

問題は、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"})は機能しますが、明らかに推奨されません。

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

編集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"})は機能しませんでした。

編集2:警告を抑制する唯一の方法は-

特定のコードの上にこのコメントを追加する-

//noinspection ResourceType

またはこれを追加する-

@SuppressWarnings({"ResourceType"})
53
Jyotman Singh

あなたが探しています(わかりやすくするために更新されました):

@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);


       }
}

編集済み:

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

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

121
Renascienza

このリント警告を無視する場合は、次のいずれかをインラインで実行できます。

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

またはメソッドレベルで:

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

Android Studio Inspectionを使用して、メソッドまたはクラスに対して@SuppressWarnings({"MissingPermission"})を生成できます。

Android studio missing permission check

1
Ahmad Ronagh