別のアプリケーション (B と呼ぶ) で使用するために、Bluetooth GPS から取得した位置をモックするサービスを実行するアプリケーション (A と呼ぶ) があります。
- A (Bluetooth GPS 位置情報を取得するサービスあり)
- Androidシステムのモックロケーション
- B (Android システムから位置情報を取得)
すべてが Android 7.0 で動作しますが、Android 8.0 (Oreo) では、アプリケーション B は Bluetooth から取得した場所を読み取りません。つまり、ログには常に次の行が出力されるため、場所をモックする際の問題があると思います。
E PassiveLocationListener_FLP: isFromMockProvider, return
場所をモックするために使用しているコードは次のとおりです。
private void changeToMockLocation() {
Log.i(TAG, "changeToMockLocation()");
Location newLocation = new Location(PROVIDER_NAME);
newLocation.setLatitude(mNMEAData.getLatitude());
newLocation.setLongitude(mNMEAData.getLongitude());
newLocation.setAccuracy(mNMEAData.getAccuracy());
newLocation.setTime(System.currentTimeMillis());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
newLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
}
// Set mock location.
if (ActivityCompat.checkSelfPermission(
mContext, android.Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
try {
mLocationManager.setTestProviderLocation(PROVIDER_NAME, newLocation);
} catch (Exception e) {
Log.e(TAG, "Error while setting test provider location: " + e);
}
}
}
問題は、例外が出力されていないことです。そのため、プロセスは正しいと思いますが、何らかの理由で Android で許可されていないようです。
ALLOW_MOCK_LOCATION
マニフェストで許可を宣言し、アプリはDeveloper Settingsで場所をモックできます。
私は何を間違っていますか?
よろしくお願いします。良い一日を。