私はAndroid studioを使用しており、compileSdkVersionは23で、以下のコードを使用しています)
if(locationManager != null){
locationManager.removeUpdates(GPSListener.this);
}
gPSリスナーがLocationListenerを実装するクラスである場合にgpsの更新を停止します。
しかし、removeUpdates行で、lint警告を下回っています
呼び出しには、ユーザーによって拒否される可能性のある許可が必要です。コードは、許可が使用可能かどうか(
checkPermission
を使用)を明示的にチェックするか、潜在的なSecurityException
を処理する必要があります
上記のコードの問題は何ですか。マニフェストファイルに追加の権限を追加する必要がありますか?.
よろしく。
SDK 23以降、Location API機能を呼び出す前に権限を確認する必要があります。これを行う方法の例を次に示します。
_if (locationManager != null) {
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
|| checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
locationManager.removeUpdates(GPSListener.this);
}
}
_
checkSelfPermission()
があります。これは、「あなた」(このアプリ)が正しい権限を持っているかどうかを確認するためのものです。 checkPermission()
もあります。これは、別のプロセスが正しい権限を持っているかどうかを確認するためのものです。
メモ
ContextCompat.checkSelfPermission()
を使用してください(JerryBradyに感謝)私のcheckSelfPermission()
を使用できませんでした。私の最小APIは14で、23が必要なためです。それを知っていれば、try
からcatch
a SecurityException
を使用することもできます。
例:
try {
locationManager.removeUpdates(GPSListener.this);
} catch (SecurityException e) {
Log.e("PERMISSION_EXCEPTION","PERMISSION_NOT_GRANTED");
}
ContextCompatに関するJerry Bradyのコメントに追加するには、これは<23の完全なコードです。
if (ContextCompat.checkSelfPermission(this, Android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this, Android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED)