Google Playアプリ

GPS位置情報中継アプリ
MLS

この記事は約20分で読めます。
スポンサーリンク

こんにちは、まっさん(@Tera_Msaki)です。

Android スマホの位置情報の精度と更新レートを向上させるために開発した
Android アプリの「
MLS – GPSロガーの位置情報をスマホに中継するアプリ」について、
使用方法を中心にご紹介したいと思います。

MLS – GPSロガーの位置情報をスマホに中継するアプリ

Bluetooth LE搭載(LNSプロファイル)のGPSロガーに Bluetooth 接続し、
GPSロガーから受信した位置情報を
スマホの位置情報として、中継するサービス型アプリです。
位置情報を使用して動作するアプリは、
スマホ内蔵 GPS の位置情報ではなく、GPSロガーの位置情報で動作するようになります。

GPSロガーから受信したGPS 位置情報は、スマホ上のアプリがスマホ内蔵 GPS センサーとして、認識・動作します。
最初に GL-770 に接続、測位レートを表示。次に 5Hz モードに設定したデジスパイスⅣに接続、測位レートを表示させたまま、デジスパイスⅣのセッティングで、5Hz モード → 10Hz モード → 20Hz モードに変更しています。

MLS – GPSロガーの位置情報をスマホに中継するアプリ

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タップで操作できる。
・アプリ本体は
サービスとして動作し、切断するまでバックグラウンドでアプリが動作し続ける。
・別のアプリからサービス起動できる。

GPSタイム計測アプリ Lapsから、シームレスで起動・停止が可能です。
動作環境

・Android 8 以降のスマートフォン
・GPSロガー( GL-770、デジスパイス3、デジスパイス4 )で動作を確認しています

MLS( Mock Location Service )が動作中は、
Android 上で動作するアプリはスマホ内蔵GPS の代わりに
GPSロガーの位置情報を受け取って動作します。
ただし、位置ゲームなど疑似ロケーションでの動作を
禁止しているアプリでは、
動作しません

この下にあるアイコンから、
MLS – GPSロガーの位置情報をスマホに中継するアプリ をダウンロードできます。

Google Play で手に入れよう

変更履歴(V4.0)
・GPSロガーを検索する場合に位置情報が ON になっているかチェックするように変更しました<new>
・Android 13 に対応しました<new>
・GPS ロガーに接続完了で、メイン画面を自動で閉じるように変更しました
<new>
・通知画面からメイン画面の表示、アプリを終了できるように変更しました<new>
・子画面のデザインと枠外タッチで画面を閉じるように変更しました

・GPS ロガーの速度単位のデフォルト値を m/s に変更しました
・効果音のボリュームを調整できるように変更しました

DigSpiceⅢ、Ⅳ(デジスパイス3、4)で高度が取得できるようになりました
GPS 位置情報の受信レートを表示できるようになりました
・メニュー背景の透過率を変更
しました
・GPS 情報の現在位置を Google Map で表示
する機能を追加しました
DigSpiceⅣ(デジスパイス4)
で動作することを確認しました
GPS ロガーの受信データを解析するための開発者モードを追加しました
画面デザインを見やすく、メニューや Back キーでの操作に対応しました
・サービス側で効果音、メッセージを表示するように変更しました
・Android 12 対応( Bluetoothの権限付与のユーザ確認を追加)
・画面デザインを見やすく、操作しやすく改善しました
・操作時の効果音を追加しました
・方位(ベアリング)を出力できるようになりました

機能説明

MLS – GPSロガーの位置情報をスマホに中継するアプリは、
Bluetooth で接続可能な GPS ロガーを
検索接続 して、
GPS ロガーから受信した位置情報を、
位置情報を使用して動作するアプリに
中継 します。
MLS は、アプリから API で連携 できるサービス型アプリです。

カテゴリ機能説明
検索デバイス検索近くにあるBluetoothデバイスを検索します。
MACアドレス指定接続するデバイスのMACアドレスを直接指定します。
接続デバイス接続デバイス検索からの選択、
MACアドレス指定のデバイスに接続して、
通信できる状態にします。
デバイス切断接続したデバイスとの通信を切断します。
中継位置情報プロバイダGPSロガーから受信した位置情報を
スマホの位置情報として中継します。
位置情報を使用して動作するアプリは、
GPSロガーの位置情報で動作します。
連携サービス別のアプリからサービス起動が可能です。
サービスとして動作し、
デバイス切断するまでバックグラウンドで動作します。

画面項目説明

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

メイン画面

デバイスの検索、デバイスとの接続と切断する画面です。

①デバイス検索<searchアイコン>
タップすることで、近くにある Bluetooth 機器を検索します。
検索結果はデバイス一覧にリスト表示します(機器名が匿名の場合は、表示しません)

デバイス検索では、Bluetooth 機器の広告パケットを解析しています。
ペアリング設定すると広告パケットが出力されなくなるため、
ペアリングは解除してください。

保存しているデバイス情報を使用する場合は、ペアリングの解除は不要です。
デバイス検索を使用する場合のみ、一旦ペアリングを解除して、
デバイス一覧からの接続後に、再度ペアリングしてください。

②接続ボタン
タップすることで、保存しているデバイス情報を使用して、
デバイスに接続します。
デバイスの接続が完了し、位置情報の中継が始まると、
メイン画面を自動で閉じます

③メニュー
タップすることで、メニューを表示します。

 Bluetoothデバイスを検索する
 デバイスを検索します。

 
デバイスに接続する
 ④ MAC アドレスの機器に接続します。

 
デバイスを切断する
 ④ MAC アドレスの機器との接続を切断します。

 
システム設定
 システム設定画面に遷移します。

 
ログ出力
 開発者モードを有効にしている場合、記録した受信データをログ出力します。

 
ヘルプ
 ブラウザで操作説明ページを表示します。

④MACアドレス
保存しているデバイス情報( MACアドレス)を表示します。

< デバイス検索結果 >

「GL7706711361」は、GPSロガー(GL-770)のシリアルナンバーです。

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

< デバイス接続 >

⑥切断ボタン
タップすることで、接続しているデバイスを切断します。

⑦GPS情報
GPS ロガーから送信されてくる GPS 情報を表示します。

⑧Google Map表示
GPS ロガーから送信されてくる GPS 情報でGoogle Map を実行します。

GPSロガーは起動してから、
位置情報の送信まで数分かかることがあります。
GPS ロガーから位置情報を受信するまで
GPS情報は表示しません

通知画面

GPS ロガーの位置情報を中継するサービスを操作する画面です。

スマホの画面上部を下方向にスワイプすることで通知画面を開きます

①メイン画面<アイコン>
タップすることで、メイン画面を表示します。

②サービス終了<×アイコン>
タップすることで、位置情報を中継するサービスを終了します。

システムパラメータ画面

システムパラメータを変更する画面です。

①画面終了<×アイコン>
タップすることで、パラメータ画面を終了します。

②パラメータ一覧
パラメータをリスト表示します。
パラメータをタップすることで、パラメータ値の入力画面を表示します。

③メニュー
タップすることで、メニューを表示します。

 閉じる
 システム設定画面を終了します。

操作説明

各機能の操作方法について、説明します。

デバイス準備

①デバイス( GPSロガー)の電源を ON にし、BLE を有効にします。

GL-770 のマニュアルより抜粋
デジスパイスⅣ のマニュアルより抜粋

BLE を有効にしても、GPSロガー本体にログが記録されます。
GPS ロガー本体に記録したログを使用するソフトとの
併用が可能です。

①デバイス検索< search アイコン>をタップします。
近くにある Bluetooth 機器を一覧表示します。

ペアリングを行うと、広告パケットが出力されなくなるため、
デバイス一覧には表示されません。
タイミングによっては、広告パケットが届かない場合もあります。
デバイス一覧に GPS ロガーが表示されない場合は、
再度デバイス検索をタップして、
デバイス一覧に GPS ロガーが表示されるまで、
デバイス検索を繰り返しください。

アプリで動作確認済みのGPSロガーです。

重要
・GL-770 を使用する場合は、
 システムパラメータ( UNIT )は
km/h を指定してください。
・DigSpiceⅢ、Ⅳ(デジスパイス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

開発者モードを有効にした場合、
GPSロガーから受信したデータをスマホ本体に蓄積します。
受信データを解析する場合のみ有効として、
通常の使用では無効にしてください。

インストール後に必ず実施してください

仮の現在地情報アプリとして動作させるために、
スマホ本体の設定で
「開発者向けオプション」を有効にし、

「仮の現在地情報アプリを選択(※)」で “MLS” を選択 してください。
※Android12では、「仮の現在地強制変更アプリを選択」の表記に変更されています。

Android12 の端末でインスト―ルしている動画です。Android 11 以前では位置情報の確認画面が異なります。
Bluetooth の確認画面は、Android 12 から追加になっています。

「開発者向けオプション」を有効にする方法
 ① Android本体メニューの設定(アイコン)をタップします。
 ②設定メニューから「システム」をタップします。
 ③システムメニューから「端末情報」をタップします。
 ④端末情報メニューの「ビルド番号」を7回タップします。

アプリからのサービス起動

以下のコードを記述することで、
アプリ側からのサービス起動・停止が可能です。


//起動
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() {
        boolean isMock = false;
        LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
            Criteria criteria = new Criteria();
            criteria.setAccuracy(Criteria.ACCURACY_FINE);
            try {
                String provider = locationManager.getBestProvider(criteria, true);
                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();
                }
            } catch (SecurityException e) {
                Log.d(TAG, String.format("isLocationMocked:%s", e.getMessage()));
                e.printStackTrace();
            }
        }
        return isMock;
    }

誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にある
コメントか、
こちら
から、お願いいたします♪

ポチッとして頂けると、
次のコンテンツを作成する励みになります♪

ブログランキング・にほんブログ村へ

Google Play ギフトカードだったら、コンビニで買えますね(^^♪
 [ ギフトカード、ギフトコードを利用する方法 ]
 ①Google Play アプリ を開きます。
 ②右上のプロフィール アイコンをタップします。
 ③[お支払いと定期購入] [ギフトコードの利用] をタップします。
 ④コードを入力します。

これからAndroidのアプリ開発やJavaでの開発を始めたい方へ

初めての Android のアプリ開発では、アプリケーション開発経験がない方や、
アプリケーション開発経験がある方でも、Java や C# などのオブジェクト指向言語が初めての方は、
書籍などによる独学ではアプリ開発できるようになるには、
かなりの時間がかかりますので、オンラインスクールでの習得をおススメします。

未経験者からシステムエンジニアを目指すのに最適かと、
まずは無料相談から♪

無料でJava言語を学べるのは、かなり魅力的♪
でも、応募資格は35歳以下です

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

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


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

コメント欄