Google Playアプリ

GPS位置情報中継アプリ MLS

Google Playアプリ
この記事は約18分で読めます。
スポンサーリンク

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

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

GPS位置情報中継アプリ MLS

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

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

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

Google Play で手に入れよう

★私が参加している練習会・競技会の会場での使用限定
アプリをお試しで使ってみたい人に、
アプリのインストールされた
スマホGPSロガーをお貸しします。
走行予定を確認していただき、お問い合わせからご予約下さい。
スマホ: Xperia1(SO-03L)
GPSロガー: GL-770、デジスパイス4

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

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

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

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

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

画面項目説明

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

メイン画面

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

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

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

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

②デバイス接続<connectアイコン>
タップすることで、保存しているデバイス情報を使用して、
デバイスに接続します。

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

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

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

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

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

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

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

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

< デバイス検索結果 >

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

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

< デバイス接続 >

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

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

⑧Google Map表示
GPSロガーから送信されてくる GPS情報の現在位置をGoogle Map で表示します。

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

<システムパラメータ画面>

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

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

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

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

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

操作説明

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

デバイス準備

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

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

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

デバイス検索

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

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

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

重要
・DigSpiceⅢ(デジスパイス3)、DigSpiceⅣ(デジスパイス4)を使用する場合は、
 システムパラメータ( UNIT )を
m/s に変更してください。

デバイス接続(デバイス一覧からの接続)

①デバイス一覧でデバイス( GPSロガー)をタップします。
 GPSロガーに正常にデバイス接続できた場合、
 「接続しました」とメッセージ表示します。
 「接続できません」とメッセージが表示された場合は、
 デバイス切断( disconnectアイコンをタップ)して、
 再度、デバイス一覧からデバイスをタップしてください。

デバイス接続(ダイレクト接続)

①デバイス接続< connectアイコン>をタップします。
 GPSロガーに正常にデバイス接続できた場合、
 「接続しました」とメッセージ表示します。
 「接続できません」とメッセージが表示された場合は、
 デバイス切断( disconnectアイコンをタップ)して、
 再度、デバイス接続( connectアイコン)をタップしてください。

デバイス切断

①デバイス切断< disconnectアイコン>をタップします。

その他

画面項目や操作説明以外について、説明します。

システムパラメータ

<パラメータ画面>のシステムパラメータ一覧から選択、パラメータ値を変更します。

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 )

ZOOM( Google Mapのズームレベルを指定。初期値は16

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

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

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

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

「開発者向けオプション」を有効にする方法
 ① 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 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;
    }
}

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

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

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

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

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

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

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

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

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


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

コメント欄

タイトルとURLをコピーしました