こんにちは、まっさん(@Tera_Msaki)です。
Android スマホの位置情報の精度と更新レートを向上させるために開発した
Android アプリの「MLS – GPSロガーの位置情報をスマホに中継するアプリ」について、
使用方法を中心にご紹介したいと思います。
Bluetooth LE搭載(LNSプロファイル)のGPSロガーに Bluetooth 接続し、GPSロガーから受信した位置情報をスマホの位置情報として、中継するサービス型アプリです。
位置情報を使用して動作するアプリは、スマホ内蔵 GPS の位置情報ではなく、GPSロガーの位置情報で動作するようになります。
最初に GL-770 に接続、測位レートを表示。次に 5Hz モードに設定したデジスパイスⅣに接続、測位レートを表示させたまま、デジスパイスⅣのセッティングで、5Hz モード → 10Hz モード → 20Hz モードに変更しています。

アプリのインストール前にスマホ本体の設定で「開発者向けオプション」を有効 にし、 インストール後に 「仮の現在地情報アプリを選択」で “MLS” を選択 してください。
詳しくは、こちらです。
【緩募】
2023年8月にGL-770の後継機GL-770Mが販売されました。
GL-770Mにアプリを対応したく、動作確認に機材をお貸しいただける人がいらっしゃいましたら、こちらまでお願いいたします。謝礼につきましては、別途ご相談とさせてください。
MLS – GPSロガーの位置情報をスマホに中継するアプリ
Bluetooth LE搭載( LNSプロファイル)の GPS ロガーに Bluetooth 接続し、Android スマホの位置情報に中継するアプリです。
開発した背景としては、スマホ内蔵 GPS の位置情報の取得が 1秒に 1回に対して、GPS ロガーでは 1秒間に 5 ~ 10回と精緻に取得することが可能で、「GPSタイム計測アプリ Laps」や「GPS走行記録アプリ Archive」をスマホ内蔵 GPS ではなく、GPS ロガーで動作させたいと思ったことがきっかけです。
簡単に Android スマホの位置情報を切り替えできることを要件として、仕様検討、開発しました。
簡単にAndroidスマホの位置情報を切り替えできること
・GPS ロガーに接続でスマホの位置情報が GPS ロガーに切り替わり、切断でスマホ内蔵 GPS に切り戻しできる。
・近くにある Bluetooth 機器を検索でき、1タッチで接続できる。
・接続した情報は保存でき、次回以降は接続操作のみで接続と切断は 1タップで操作できる。
・アプリ本体はサービスとして動作し、切断するまでバックグラウンドでアプリが動作し続ける。
・別のアプリからサービス起動できる。
・Android 8 以降のスマートフォン
・GPSロガー( GL-770、デジスパイス3、デジスパイス4 )で動作を確認しています。
この下にあるアイコンから、
MLS – GPSロガーの位置情報をスマホに中継するアプリ をダウンロードできます。

変更履歴(V5.1)
・Android14に対応しました<new>
・タブレットに対応しました
・開発者オプションを有効化しているかチェックを追加しました
・GPSロガーを検索する場合に位置情報が ON になっているかチェックするように変更しました
・GPS ロガーに接続完了で、メイン画面を自動で閉じるように変更しました
・通知画面からメイン画面の表示、アプリを終了できるように変更しました
・子画面のデザインと枠外タッチで画面を閉じるように変更しました
・GPS ロガーの速度単位のデフォルト値を m/s に変更しました
機能説明
MLS – GPSロガーの位置情報をスマホに中継するアプリは、Bluetooth で接続可能な GPS ロガーを検索 ・接続 して、GPS ロガーから受信した位置情報を、位置情報を使用して動作するアプリに中継 します。
MLS は、アプリから API で連携 できるサービス型アプリです。
カテゴリ | 機能 | 説明 |
---|---|---|
検索 | デバイス検索 | 近くにあるBluetoothデバイスを検索します。 |
MACアドレス指定 | 接続するデバイスのMACアドレスを直接指定します。 | |
接続 | デバイス接続 | デバイス検索からの選択、 MACアドレス指定のデバイスに接続して、 通信できる状態にします。 |
デバイス切断 | 接続したデバイスとの通信を切断します。 | |
中継 | 位置情報プロバイダ | GPSロガーから受信した位置情報を スマホの位置情報として中継します。 位置情報を使用して動作するアプリは、 GPSロガーの位置情報で動作します。 |
連携 | サービス | 別のアプリからサービス起動が可能です。 サービスとして動作し、 デバイス切断するまでバックグラウンドで動作します。 |
画面項目説明
各画面の画面項目について、説明します。
メイン画面
デバイスの検索、デバイスとの接続と切断する画面です。

①デバイス検索<searchアイコン>
タップすることで、近くにある Bluetooth 機器を検索します。
検索結果はデバイス一覧にリスト表示します(機器名が匿名の場合は、表示しません)
保存しているデバイス情報を使用する場合は、ペアリングの解除は不要です。
デバイス検索を使用する場合のみ、一旦ペアリングを解除して、デバイス一覧からの接続後に、再度ペアリングしてください。
②接続ボタン
タップすることで、保存しているデバイス情報を使用して、デバイスに接続します。
デバイスの接続が完了し、位置情報の中継が始まると、メイン画面を自動で閉じます。
③メニュー
タップすることで、メニューを表示します。

Bluetoothデバイスを検索する
デバイスを検索します。
デバイスに接続する
④ MAC アドレスの機器に接続します。
デバイスを切断する
④ MAC アドレスの機器との接続を切断します。
システム設定
システム設定画面に遷移します。
ログ出力
開発者モードを有効にしている場合、記録した受信データをログ出力します。
ヘルプ
ブラウザで操作説明ページを表示します。
④MACアドレス
保存しているデバイス情報( MACアドレス)を表示します。
< デバイス検索結果 >

⑤デバイス一覧
近くにある Bluetooth 機器を一覧表示します。
表示内容はデバイス名、MAC アドレス、アドバタイズのタイプです。
デバイス名をタップすると、デバイス機器に接続します。
< デバイス接続 >

⑥切断ボタン
タップすることで、接続しているデバイスを切断します。
⑦GPS情報
GPS ロガーから送信されてくる GPS 情報を表示します。
⑧Google Map表示
GPS ロガーから送信されてくる GPS 情報でGoogle Map を実行します。
通知画面
GPS ロガーの位置情報を中継するサービスを操作する画面です。

①メイン画面<アイコン>
タップすることで、メイン画面を表示します。
②サービス終了<×アイコン>
タップすることで、位置情報を中継するサービスを終了します。
システムパラメータ画面
システムパラメータを変更する画面です。

①画面終了<×アイコン>
タップすることで、パラメータ画面を終了します。
②パラメータ一覧
パラメータをリスト表示します。
パラメータをタップすることで、パラメータ値の入力画面を表示します。
③メニュー
タップすることで、メニューを表示します。

閉じる
システム設定画面を終了します。
操作説明
各機能の操作方法について、説明します。
デバイス準備
①デバイス( GPSロガー)の電源を ON にし、BLE を有効にします。


デバイス検索
①デバイス検索< search アイコン>をタップします。
近くにある Bluetooth 機器を一覧表示します。
アプリで動作確認済みのGPSロガーです。
重要
・GL-770を使用する場合、システムパラメータ(UNIT)はkm/hを指定します。
・デジスパイス3、4で高度を取得する場合、システムパラメータ(RESERVED_FOR_FUTURE_USE)は1を指定します。
デバイス接続(デバイス一覧からの接続)
①デバイス一覧から、デバイス( GPSロガー)をタップします。
GPS ロガーに正常にデバイス接続できた場合、「接続しました」とメッセージ表示します。
デバイス接続(ダイレクト接続)
①接続ボタンをタップします。
GPS ロガーに正常にデバイス接続できた場合、「接続しました」とメッセージ表示します。
デバイス切断
①メイン画面の切断ボタンをタップします。
または、通知画面のサービス終了<×アイコン>をタップします。
その他
画面項目や操作説明以外について、説明します。
システムパラメータ
システムパラメータ画面のパラメータ一覧から選択、パラメータ値を変更します。
ACCURACY( GPS ロガーの精度。初期値は10 )
DEVICE_MAC( GPS ロガーの MAC アドレス )
DEVLOG( 開発者モードを有効にする場合は true、しない場合は false)
MOCK_NETWORK_PROVIDER( ネットワーク位置情報も偽装する場合は true、しない場合は false )
RESERVED_FOR_FUTURE_USE(デジスパイスを使用する場合は 1 、初期値は1 )
UNIT( GPS ロガーの速度単位:km/h、m/s、knots )
VOLUME(効果音のボリューム( 0.0 ~ 1.0 )。初期値は1.0[最大])
ZOOM( Google Map のズームレベルを指定。初期値は16 )
インストール時に必ず実施してください
仮の現在地情報アプリとして動作させるために、スマホ本体の設定で「開発者向けオプション」を有効にし、
「仮の現在地情報アプリを選択(※)」で “MLS” を選択 してください。
※Android12以降では、「仮の現在地強制変更アプリを選択」の表記に変更されています。
Bluetooth の確認画面は、Android 12 から追加になっています。
アプリからのサービス起動
以下のコードを記述することで、アプリ側からのサービス起動・停止が可能です。
//起動
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 boolean isLocationMocked() {
String[] providers = new String[]{LocationManager.GPS_PROVIDER, LocationManager.NETWORK_PROVIDER};
boolean isMock = false;
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
try {
for (String provider : providers) {
Location location = locationManager.getLastKnownLocation(provider);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
// Android11以前
isMock = location != null && location.isFromMockProvider();
} else {
// Android12以降
isMock = location != null && location.isMock();
}
if (isMock) break;
}
} catch (SecurityException e) {
Log.d(TAG, String.format("isLocationMocked:%s", e.getMessage()));
e.printStackTrace();
}
}
return isMock;
}
誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にあるコメントか、
こちらから、お願いいたします♪
ポチッとして頂けると、
次のコンテンツを作成する励みになります♪

Google Play ギフトカードだったら、コンビニで買えますね(^^♪
[ ギフトカード、ギフトコードを利用する方法 ]
①Google Play アプリ を開きます。
②右上のプロフィール アイコンをタップします。
③[お支払いと定期購入] [ギフトコードの利用] をタップします。
④コードを入力します。
これからAndroidのアプリ開発やJavaでの開発を始めたい方へ
アプリケーション開発経験がない方や、アプリケーション開発経験がある方でも、Java や C# などのオブジェクト指向言語が初めての方は、Android のアプリ開発ができるようになるには、かなりの時間がかかります。オンラインスクールでの習得を、強くおススメします。
副業でアプリケーション開発と考えているなら、おススメです。
無料説明会に参加して、話を聞くだけでもためになるよ♪

ITスキルを身に付け、キャリアアップ。オンライン授業で仕事と両立できます。
まずは資料請求から♪
未経験者からシステムエンジニアを目指すのに最適かと、
まずは無料相談から♪

無料でJava言語を学べるのは、かなり魅力的♪
でも、応募資格は35歳以下です、、、
2022年12月から説明会が土曜日開催が追加されていますよ♪
説明会では、希望者に対してプログラミング体験もできるよ♪

未経験者からプログラマーを目指すのに最適かと、
まずは無料カウンセリングから♪

カリキュラムとサポートがしっかりしています、
お得なキャンペーンとかいろいろやっています♪

ゲーム系に強いスクール、UnityやUnrealEngineを習得するのに最適かと、
まずは無料オンライン相談から♪

参考になったら、💛をポッチとしてね♪
コメント欄