こんにちは、まっさん(@Tera_Msaki)です。
Androidスマホの位置情報の精度と更新レートを向上させるために
開発したAndroidアプリの「GPS位置情報中継アプリ MLS(Mock Location Service」について、
使用方法を中心にご紹介したいと思います。
・GPS位置情報中継アプリ MLS について知りたい人
・MLSの使用方法について知りたい人
・MLSを使用している動画を見たい人
この記事を読めば、 “GPS位置情報中継アプリ MLS” の使用方法がわかります。
愛用品をご紹介♪
スマホに内蔵しているGPSセンサーの更新レートが1Hzに対して、
5Hzでモータスポーツユースでも十分な性能です。
MLS(Mock Location Service)
Bluetooth LE搭載(LNSプロファイル)のGPSロガーにBluetooth接続し、
疑似ロケーション(MockLocation)として、
Androidスマホの位置情報に中継するアプリです。

開発した背景としては、
スマホ内蔵GPSの位置情報の取得が1秒に1回に対して、
GPSロガーでは1秒間に5~10回と精緻に取得することが可能で、
「GPSタイム計測アプリ Laps」や「GPS走行記録アプリ Archive」を
スマホ内蔵GPSではなく、
GPSロガーで動作させたいと思ったことがきっかけです。
簡単にAndroidスマホの位置情報を切り替えできることを要件として、
仕様検討、開発しました。
簡単にAndroidスマホの位置情報を切り替えできること
・GPSロガーに接続でスマホの位置情報がGPSロガーに切り替わり、
切断でスマホ内蔵GPSに切り戻しできる。
・近くにあるBluetooth機器を検索でき、1タッチで接続できる。
・接続した情報は保存でき、次回以降は接続操作のみで接続と切断は1タップで操作できる。
・アプリ本体はサービスとして動作し、切断するまでバックグラウンドでアプリが動作し続ける。
・別のアプリからサービス起動できる。
変更履歴(V2.2)
・サービス側で効果音、メッセージを表示するように変更しました<new>
・Android12対応(Bluetoothの権限付与のユーザ確認を追加)
・画面デザインを見やすく、操作しやすく改善しました
・操作時の効果音を追加しました
・方位(ベアリング)を出力できるようにしました
この下にあるアイコンから、GPS位置情報中継アプリ MLSをダウンロードできます。

画面項目説明
各画面の画面項目について、説明します。
メイン画面

①デバイス検索<searchアイコン>
タップすることで、近くにあるBluetooth機器を検索します。
(結果はデバイス一覧にリスト表示)
②デバイス接続<connectアイコン>
タップすることで、保存しているデバイス情報を使用して、
デバイスに接続します。
③システム設定
タップすることで、システムパラメータ画面に遷移します。
④MACアドレス
保存しているデバイス情報(MACアドレス)を表示します。

「GL7706711361」は、GPSロガー(GL-770)のシリアルナンバーです。
⑤デバイス一覧
近くにあるBluetooth機器を一覧表示します。
表示内容はデバイス名、MACアドレス、アドバタイズのタイプ(複数)です。

⑥デバイス切断<disconnectアイコン>
タップすることで、接続しているデバイスを切断します。
⑦GPS情報
GPSロガーから送信されてくるGPS情報を表示します。
<システムパラメータ画面>

①パラメータ一覧
パラメータをリスト表示します。
パラメータをタップすることで、パラメータ値の入力画面を表示します。
②画面終了<×アイコン>
タップすることで、パラメータ画面を終了します。
③ヘルプ<?アイコン>
タップすることで、WEBブラウザで操作説明ページを表示します。
操作説明
各機能の操作方法について、説明します。
デバイス検索
①デバイス検索<searchアイコン>をタップします。
デバイス一覧に、近くにあるBluetooth機器を一覧表示します。
アプリで動作確認済みのGPSロガーです。
重要
・DigSpiceⅢ(デジスパイス3)を使用する場合は、システムパラメータ(UNIT)を “m/s” に変更してください。
デバイス接続(デバイス一覧からの接続)
①デバイス一覧でデバイス(GPSロガー)をタップします。
GPSロガーに正常にデバイス接続できた場合、
「接続しました」とメッセージ表示します。
「接続できません」とメッセージが表示された場合は、
デバイス切断(disconnectアイコンをタップ)して、
再度、デバイス一覧からデバイスをタップしてください。
デバイス接続(ダイレクト接続)
①デバイス接続<connectアイコン>をタップします。
GPSロガーに正常にデバイス接続できた場合、
「接続しました」とメッセージ表示します。
「接続できません」とメッセージが表示された場合は、
デバイス切断(disconnectアイコンをタップ)して、
再度、デバイス接続(connectアイコン)をタップしてください。
デバイス切断
①デバイス切断<disconnectアイコン>をタップします。
その他
画面項目や操作説明以外について、説明します。
システムパラメータ
<パラメータ画面>のシステムパラメータ一覧から選択、パラメータ値を変更します。
MOCK_NETWORK_PROVIDER(ネットワーク位置情報も偽装する場合はtrue、しない場合はfalse)
DEVICE_MAC(GPSロガーのMACアドレス)
UNIT(GPSロガーの速度単位:km/h、m/s、knots)
ACCURACY(GPSロガーの精度)
インストール後に必ず実施してください
仮の現在地情報アプリとして動作させるために、
スマホ本体の設定で「開発者向けオプション」を有効にし、
「仮の現在地情報アプリを選択(※)」で “MLS” を選択 してください。
※Android12では、「仮の現在地強制変更アプリを選択」の表記に変更されています。
アプリからのサービス起動
以下のコードを記述することで、
アプリ側からのサービス起動・停止が可能です。
//起動
Intent intent = new Intent();
intent.setAction("MockLocationService");
intent.setPackage("com.gymtec.mls");
startForegroundService(intent);
//停止
Intent intent = new Intent();
intent.setAction("MockLocationService");
intent.setPackage("com.gymtec.mls");
stopService(intent);
アプリ側からサービスとして呼び出すには、
AndroidManifest.xml に以下の記述が必要です。
<queries>
<package android:name="com.gymtec.mls" />
:
</queries>
位置情報がGPSロガーに置き換わっているか判定
以下のコードを呼び出すことで、
アプリ側でAndroidスマホの位置情報が
GPSロガーに置き換わっているかの判定が可能です。
public static boolean isLocationMocked(Context context) {
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
try {
String provider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(provider);
return location != null ? location.isFromMockProvider() : false;
} catch (SecurityException e) {
e.printStackTrace();
return false;
}
}
アプリ開発に興味があって、最初の一歩が踏み出せない方には、オンラインで学べるスクールがおススメです。





コメント