android.permission.ACCESS_COARSE_LOCATIONを使います。android.permission.ACCESS_FINE_LOCATIONを使います。<manifest ... > <!-- Always include this permission --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!--Include only if your app benefits from precise location access. --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> </manifest>
ACCESS_FINE_LOCATION実行時アクセス許可をリクエストしていたとしても、ユーザーはアプリが近似位置情報だけを取得するようリクエストできます。このようなユーザーの意向に対応するため、ACCESS_FINE_LOCATIONアクセス許可を単独で要求することは避けてください。代わりに、実行時リクエストでは、ACCESS_FINE_LOCATIONアクセス許可とACCESS_COARSE_LOCATIONアクセス許可のどちらでも求められるようにしてください。// Create a class-level field for the ActivityResultLauncher
private ActivityResultLauncher<String[]> locationPermissionLauncher;
// Initialize the ActivityResultLauncher in your onCreate or initialization method
locationPermissionLauncher = registerForActivityResult(
new ActivityResultContracts.RequestMultiplePermissions(),
new ActivityResultCallback<Map<String, Boolean>>() {
@Override
public void onActivityResult(Map<String, Boolean> permissions) {
if (permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false)) {
// Precise location access granted.
} else if (permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false)) {
// Only approximate location access granted.
} else {
// No location access granted.
}
}
}
);

| アクセス許可 | 正確 | 近似 |
|---|---|---|
アプリ利用中 | ACCESS_FINE_LOCATIONとACCESS_COARSE_LOCATION | ACCESS_COARSE_LOCATION |
今回だけ | ACCESS_FINE_LOCATIONとACCESS_COARSE_LOCATION | ACCESS_COARSE_LOCATION |
拒否 | 位置情報へのアクセス許可なし | 位置情報へのアクセス許可なし |
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
private final LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
// Handle location updates here
}
};
public Location getLastKnownLocation (String provider)
public void getCurrentLocation (String provider,
LocationRequest locationRequest,
CancellationSignal cancellationSignal,
Executor executor,
Consumer<Location> consumer)
public void requestLocationUpdates (String provider,
long minTimeMs,
float minDistanceM,
LocationListener listener)
public void requestLocationUpdates (String provider,
long minTimeMs,
float minDistanceM,
PendingIntent pendingIntent)
public void requestLocationUpdates (String provider,
LocationRequest locationRequest,
PendingIntent pendingIntent)
public void requestLocationUpdates (String provider,
LocationRequest locationRequest,
Executor executor,
LocationListener listener)
public void removeUpdates (LocationListener listener)
getCurrentLocation()など、一部のAPIの動作はAOSPと異なる場合があります。| 公開メソッド | |
|---|---|
getAllProviders()は、利用可能なすべての位置情報プロバイダーの名前のリストを返します。 | |
getCurrentLocation()は、指定されたLocationRequestに基づいて、指定されたプロバイダーから現在地情報の単一の修正を非同期で返します。注: この呼び出しでMeta Questヘッドセットから提供される位置情報は、キャッシュに入れられたものである場合があります。 | |
getLastKnownLocation(String provider)は、プロバイダーによる既知の最新の位置情報をキャッシュから取得します。 | |
getProvider(String provider)は、利用可能な位置情報プロバイダーの名前のリストを返します。注: Androidでは、APIのバージョン31でこのメソッドは廃止されました。 | |
getProviderProperties(String provider)は、指定されたプロバイダーのプロパティを返します。その時点でプロパティが未知の場合はnullを返します。 | |
getProviders()は、利用可能な位置情報プロバイダーの名前のリストを返します。 | |
hasProvider() 指定された位置情報プロバイダーがこのデバイス上に存在する場合、現在有効であるかどうかに関係なくtrueを返します。 | |
isLocationEnabled()は、位置情報の状態が現在有効か無効かを返します。変更のリッスンについては、MODE_CHANGED_ACTIONを参照してください。 | |
isProvidedEnabled()は、指定されたプロバイダーが現在有効か無効かのステータスを返します。変更のリッスンについては、PROVIDERS_CHANGED_ACTIONを参照してください。 | |
requestFlush()は、指定されたプロバイダーに、リスナーに対して一括処理した位置情報をフラッシュするようリクエストします。 | |
requestLocationUpdates() 指定したプロバイダーからの位置情報の更新情報を登録します。 | |
requestSingleUpdate()は、指定したプロバイダーと保留中のインテントを使って、単一の位置情報の更新情報を登録します。注: Androidでは、APIのバージョン30でこのメソッドは廃止されました。 |
| 公開メソッド | |
|---|---|
addGpsStatusListener() Meta QuestヘッドセットにはGPSチップセットがありません。 | |
addNmeaListener() Meta QuestヘッドセットにはGPSチップセットがありません。 | |
addProximityAlert() ACCESS_BACKGROUND_LOCATIONアクセス許可は禁止されています。 | |
addTestProvider() SecurityExceptionになります。 | |
clearTestProvider() SecurityExceptionになる | |
getGnssAntennaInfo() Meta QuestヘッドセットにはGPSチップセットがありません。 | |
getGnssCapabilitie() Meta QuestヘッドセットにはGPSチップセットがありません。 | |
getGnssHardwareModelName() Meta QuestヘッドセットにはGPSチップセットがありません。 | |
getGnssYearofHardware() Meta QuestヘッドセットにはGPSチップセットがありません。 | |
getGPSStatus() Meta QuestヘッドセットにはGPSチップセットがありません。 | |
registerAntennaInfoListener() Meta QuestヘッドセットにはGPSチップセットがありません。 | |
registerGnssMeasurementsCallback() Meta QuestデバイスにはGPSチップセットがありません。 | |
registerGnssNavigationCallback() Meta QuestヘッドセットにはGPSチップセットがありません。 | |
registerGnssStatusCallback() Meta QuestヘッドセットにはGPSチップセットがありません。 | |
removeGpsStatusListener() Meta QuestヘッドセットにはGPSチップセットがありません。 | |
removeNmeaListener() Meta QuestヘッドセットにはGPSチップセットがありません。 | |
removeProximityAlert() ACCESS_BACKGROUND_LOCATIONアクセス許可は禁止されています。 | |
removeTestProvider() SecurityExceptionになります。 | |
sendExtraCommand() ACCESS_LOCATION_EXTRA_COMMANDSアクセス許可は禁止されています。 | |
setTestProviderEnabled() SecurityExceptionになる。 | |
setTestProviderLocation() SecurityExceptionになる。 | |
setTestProviderStatus() SecurityExceptionになる。 | |
unregisterAntennaInfoListener() Meta QuestヘッドセットにはGPSチップセットがありません。 | |
unregisterGnssNavigationMessageCallback() Meta QuestヘッドセットにはGPSチップセットがありません。 |