まっさんの日記

まっさんの日記

PR

×

カレンダー

キーワードサーチ

▼キーワード検索

コメント新着

Mizuki8515 @ Re:塗装の縮れ(対策)(10/07) この方法は確かに有効そうですね。クリア…
2021.10.18
XML
カテゴリ: くるま




GPSロガーアプリ ​で使用しているDG-PRO1ですが、
不満な部分があります。

DG-PRO1単体では使用できないので、
専用アプリのDroggerGpsを使用します。
本体の設定から、疑似ロケーションの実行など。
この専用アプリ、非常によくできているのですが、
疑似ロケーションの終了後のアプリ側の後始末が悪いんです。

後始末が悪いとどんなことが起こるかというと、
疑似ロケーションを終了しても、
内部GPSを使用しているアプリで位置情報が取れなくなる現象が起こります。

この現象の対処としては、
スマホ本体の位置情報を解除して、再び位置情報を有効にします。
このあとに内部GPSを使用しているアプリを再起動するれば、
アプリから位置情報が取れるようになります。
この方法でダメなら、スマホ本体を再起動するぐらいでしょうか。

あと、別のアプリから(サービス)起動できるけど、停止できないこと。
これは、アプリから利用する側からすると致命的かな。
厳密にはアプリ(サービス)は停止できるが、DG-PRO1との接続が停止しない。
要するに、専用アプリのDroggerGpsを使用しないと、
疑似ロケーションを終了できないということ。

MLS では、以下のようなことをして、
不満な部分を解消しています。

#内蔵GPSをもたない、wifiだけで位置情報を取得している端末の対応
#プロパティでネットワークのモック制御
boolean MOCK_NETWORK_PROVIDER = Boolean.parseBoolean(propertiesHandler.getProperty(properties, "MOCK_NETWORK_PROVIDER", "false"));
providers = MOCK_NETWORK_PROVIDER ?
new String[]{LocationManager.GPS_PROVIDER, LocationManager.NETWORK_PROVIDER}:
new String[]{LocationManager.GPS_PROVIDER};

#モックプロバイダのアタッチ
#GPS位置情報(+ネットワーク位置情報)のモックプロバイダとして登録
private boolean attachMockLocation() {
try {
for (String provider : providers) {
locationManager.addTestProvider(provider,
false,
false,
false,
false,
true,
true,
false,
Criteria.POWER_LOW,
Criteria.ACCURACY_FINE);
locationManager.setTestProviderEnabled(provider, true);
if (DEBUG) Log.d(TAG,String.format("attachMockLocation:%s", provider));
}
return true;
} catch (Exception e) {
Log.d(TAG, String.format("attachMockLocation:%s", e.getMessage()));
e.printStackTrace();
return false;
}
}

#モックプロバイダのデタッチ
#GPS位置情報(+ネットワーク位置情報)のモックプロバイダ削除
private void detachMockLocation() {
try {
for (String provider : providers) {
locationManager.clearTestProviderEnabled(provider);
locationManager.removeTestProvider(provider);
if (DEBUG) Log.d(TAG,String.format("detachMockLocation:%s", provider));
}
} catch (Exception e) {
Log.d(TAG, String.format("detachMockLocation:%s", e.getMessage()));
e.printStackTrace();
}
}

後始末が悪いのは、デタッチを正しく行えていないと思われます。

@Override
public void onDestroy() {
if (DEBUG) Log.d(TAG, "onDestroy");
if (handler != null) handler.removeCallbacks(runnable);
//MockLocationのデタッチ
if (providers != null) detachMockLocation();
//BLEコントローラーのデタッチ
if (bluetoothLowEnergyController != null) {
if (bluetoothLowEnergyController.requestBluetoothFeature()) {
bluetoothLowEnergyController.disconnect();
bluetoothLowEnergyController.pause();
}
}
super.onDestroy();
}


あと、サービス停止時に、DG-PRO1との接続が停止しないのは、
サービス側の onDestroy() に、
DG-PRO1との接続停止のロジックを書いていないと思われます。

別のアプリからの利用を想定していないのでというあれば、
そういうことなんでしょうけど。






お気に入りの記事を「いいね!」で応援しよう

最終更新日  2021.10.18 20:58:00
コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: