見出し画像

【Androidアプリの開発者向け】空が見えれば、どこでもつながる。au Starlink Directデータ通信対応アプリ開発ための参考情報

KDDIは2025年8月28日、Android の一部機種において、au Starlink Direct による衛星データ通信を開始しました。これにより、YAMAP・ウェザーニュースなどのアプリが、衛星通信中も利用可能となっています。

本記事ではアプリを試作した経験をもとに、Android アプリ開発者のみなさまに向け、au エリア圏外に行かずにアプリ開発する際の参考情報を紹介しています。なお、本記事の情報は、2025年9月上旬(一部、2025年12月上旬)時点のものとなっております。

顔写真(プロフィール)

【プロフィール】 小岩井こいわい 航介こうすけ
金融機関勤務を経てKDDIに入社後、ID・認証に関する実装・運用や、新技術全般に関する検証、活用検討を担当。
デジタルアイデンティティ分野の標準化団体である、OpenID FoundationやFIDOアライアンスに参加し、安心・安全なオンライン社会の実現を目指して活動中。2025年度 日本ITU協会賞 奨励賞受賞。
共著に「パスキーのすべて」(2025年 技術評論社刊)
日本証券アナリスト協会 認定アナリスト(CMA)


公式情報

現時点において、Android での衛星データ通信対応に関する公式の情報源は、au のホームページと、Android の開発者向け情報ページがあります。
まずはそちらを参照ください。

au Starlink Directの公式ホームページ

アプリ開発者さま向けに、対応機種、OS バージョンなどの情報を公開しています。
au Starlink Direct アプリ開発事業者様向けサポートサイト

Android開発者向けサイト

アプリを衛星データ通信に対応させるための具体的な方法について掲載しています。

※ 上記サイト内で案内のある、AndroidManifest.xmlに追記する<meta-data> エレメントは、 <application></application>タグの間に記載してください

UX上の考慮事項

衛星通信中は、地上波の 5G や LTE 回線と比較すると通信速度が低下します。また、移動する衛星が山などに隠れると通信が途切れる可能性があります。そのため、通信エラーをダイアログ表示するような UI は、ユーザ体験が著しく落ちる可能性があります。
衛星通信中は、そのことがわかるような表示を行い、ユーザの期待値をコントロールすることで改善が見込めます。

衛星データ通信中は外部ブラウサは利用できません。

外部ブラウザを呼び出したり、Custom Tabs, Auth Tabs を利用する処理は、外部ブラウザが衛星データ通信に対応していないため、オフラインエラーになってしまうようです。アプリの認証などで外部ブラウザを利用している場合はご留意ください。

衛星データ通信対応端末かどうかを判定する方法

現時点で、ユーザが利用中の端末が衛星データ通信に対応しているかを判定する確実な API などは用意されておりません。au のホームページで案内されている対応端末をもとに、Build.MODEL などで判定いただく必要があります。
同様に、ユーザが利用中の回線が au Starlink Direct に対応しているかの判定方法も用意されておりません。

auエリア圏内やWi-Fi接続中に強制的に衛星データ通信に切り替えることはできません

Android 開発者向けサイトの記載の通り、AndroidManifest の設定を行うと、Wi-Fi に接続しておらず、モバイル回線も圏外である場合のみ、衛星データ通信に切り替わります。強制的に衛星データ通信に切り替える方法は用意されておりません。

Android StudioのVirtual Device上で衛星通信を再現する方法

公式情報をもとに実際に開発したアプリの動作確認のために、au の圏外エリアに行くのはとても大変です。ここでは、Android Studio の Virtual Device (エミュレータ)を利用して、衛星通信状態を再現し、開発中のアプリの動作試験を簡易的に行う方法をご紹介します。
※ MacBook (Apple silicon) で動作を確認した結果です。他プラットフォームでの動作は異なる場合がありますのでご了承ください。

Android Studio Previewのインストール

※ 2025年12月時点で、最新の Android Studioで対応しているので、Previewのインストールは不要です。

au Starlink Direct でのデータ通信を行うためには、端末ソフトウェアのアップデートが必要な場合があります。Virtual Device も同様、最新のソフトウェアであることが必要です。現時点で衛星データ通信モードが正常に動作するのは、Android Studio Preview からダウンロードできる、CANARY バージョンの Virtual Device用イメージのみとなっているようです。
なお、Android Studio の Preview版と正式版の共存は可能なようですので、今お使いの Android Studio をアンインストールする必要はありませんが、既存の開発環境に影響を与えるリスクがございますので、必要に応じてバックアップをとったり、別の PC を用意するなどご留意ください。

Android Studio Previewのダウンロードページ
Android Studio Preview版のダウンロード画面
日本語で表示された場合には右側の「カナリア ビルド」をダウンロードしてください。

テスト用のサンプルアプリを作る

今回、衛星データ通信をテストするために、シンプルなテストアプリをGemini に作ってもらいました。東京の現在の天気を表示するアプリです。
空のプロジェクトを作成したら、Gemini に対して指示を行います。

Android Studio上のGemini Agentに、東京の現在の天気を表示するだけの簡単なアプリを作ってもらうためのプロンプトを入力。Create a simple application to show the current wether of Tokyo.
Android Studio 上の Gemini Agent に、東京の現在の天気を表示するだけの簡単なアプリを作ってもらうためのプロンプトを入力。

あとは提案された通りに Accept を押し続けると、 Open-Meteo.com から東京の気象情報を取得して、表示するアプリができました。

Android Studio上でGemini Agentに作ってもらったサンプルアプリ
Gemini Agentに作ってもらったサンプルアプリ

CANARYイメージのVirtual Deviceを追加する

作ったアプリを動作させるための Virtual Device (エミュレータ)を作成します。Android Studio の右側に表示されている Tool Window の上から3番目、Device Manager を開いたあと、+ アイコンをクリックして、Create Virtual Device を選択します。

Android StudioのDevice Managerの画面
Device Manager画面の「+」を押して、Create Virtual Device を選択

最初に、デバイスの機種を選ぶ画面が表示されますが、ここでは、Pixel 10が選べないため、Pixel 9 を選びます。
※ 2025年12月3日時点で、Pixel 9 シリーズ(Pixel9aを除く)は au Starlink Direct による衛星データ通信に対応しています。

Android StudioのDevice ManagerでCreate Virtual Device を行う際の Add Device 画面でPixel 9 を選択している
デバイスの機種を選択

その後の画面で、System Image の選択ができますので、API には「API CANARY Preview」、Services は「Google APIs」を選択します。
※ 2025年12月時点では、APIには「API 36.1 “Baklava”; Android 16.0」、Services は「Google APIs」を選択してください。

Android StudioのDevice ManagerでCreate Virtual Device を行う際の Select system imageの画面で、APIとServicesを選択している
API CANARY Previewと、Google APIsを選択

作成した Virtual Device 上でサンプルアプリを実行し、東京の現在の天気が表示されることを確認します。

東京の現在の天気を表示するだけのサンプルアプリの画面
東京の現在の天気を表示するだけのアプリの画面
(Weather data by Open-Meteo.com (CC BY 4.0))

衛星データ通信 Mockモードへの切り替え

それでは早速、衛星データ通信をモックするモードに切り替え、衛星データ通信中のアプリの動作を再現してみます。まずは Virtual Device の設定から、Wi-Fi を OFF にしてください。
※ Virtual Device の仕様上、通信キャリアが T-Mobile と表示されていますが、ダミーの値ですので問題ありません。

Android Virtual Deviceの設定アプリのInternetの画面。Use Wi-Fiがオフになっている
Virtual Device上の設定アプリでWi-Fiをオフに

電話アプリを起動し、「 * # * # 4 6 3 6 # * # *」と入力すると、専用の設定画面が起動します。

電話アプリで *#*#4636#*#と入力している画面
電話アプリで 「*#*#4636#*#」と入力している画面。
次に「*」を入力すると後続のテスト画面に遷移する。

「Phone Information」を選択し、すこし下にスクロールすると、
「Mock Carrier Satellite Mode (Debug Build only)」と、
「Mock Satellite Data Mode (Debug only)」という項目が表示されますので、その2つをONにしてください。すると、下に「Restricted」「Limited」「Unlimited」の3つのラジオボタンが表示されますので、真ん中の「Limited」を選択してください。

Phone info画面。「Mock Carrier Satellite Mode (Debug Build only)」と、「Mock  Satellite Data Mode (Debug  only)の項目をONにしている。
「Mock Carrier Satellite Mode (Debug Build only)」と、
「Mock Satellite Data Mode (Debug only)」をONにして、
真ん中の「Limited」を選択

Virtual Device の言語設定を日本語にした場合には、左と真ん中の選択肢がどちらも「制限付き」となってしまっていますが、真ん中を選択してください。

日本語設定にした「スマートフォン情報」設定画面。「携帯通信会社の擬似航空写真モード(デバックビルドのみ)」と、「モック衛星データモード(デバックのみ)」をONにして、真ん中の「制限付き」のラジオボタンが選択されている。
日本語にした場合の設定画面

この設定を終えた状態で、Virtual Device の画面の右上に衛星アイコンが表示され、衛星データ通信モードであることが確認できます。
この状態で、先ほどのサンプルアプリを再実行すると、ネットワーク通信ができないため、エラーとなります。

テストアプリを実行し、エラーが表示されている。java.net.UnknownHostException: Unable to resolve host "api.open-meteo.com": No address associated with hostname
テストアプリを再実行し、エラーが表示されている。

この状態から、テストアプリを衛星データ通信中でも利用できるように改修します。

サンプルアプリの衛星データ通信対応(AndroidManifestの追加)

Google のガイドに従って、AndroidManifest.xml に meta-tag を追加します。
この状態で、アプリを再実行すると、東京の天気が表示されることが確認できます。通信状態の反映まで、何度かアプリの再起動が必要な場合があります。

衛星データ通信中も東京の現在の天気を表示できる
(Weather data by Open-Meteo.com (CC BY 4.0))

通信速度制限の設定

モック衛星データ通信モードでは、通信速度は通常と同等となります。そのため、開発者モードの「Network download rate limit」から、128kbps, 256kbps などを指定して、低帯域下でのアプリの動作を確認してください。

Developer Options画面にNetwork download rate limitが表示されている。
設定アプリの About emulated device の最下部にあるビルド番号を7回連打し、Developer mode を有効化してから、Developer OptionsのNetwork download rate limit を選択
Configure network download rate limit 画面。選択肢として、 No Limit, 128kbps, 256kpbs, 1Mbps, 5Mbps, 15Mbps がある。
128kbpsや、256kpbs を選択して、低帯域下でのアプリUXを確認できる

APIレベルの設定

AndroidManifest の設定は、API レベルを問わず設定可能ですが、NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED などを利用して衛星通信状態を判定する場合、この定数が定義されているのは API レベル 36 になるため、定数を使うためには compileSdkVersion を 36 にする必要があります。
冒頭でご紹介した Android 開発者向けサイトでは、この定数をハードコードすることが可能と記載があります。その場合は、compileSdkVersion は変更不要ですが、端末の API レベルが 34 以下の場合はハードコードした定数値において java.lang.IllegalArgumentException が発生する場合があることを確認しています。API レベル 35 以上でのみ動作するように条件分岐を追加してください。
※ 現時点で au Starlink Direct に対応している機種の OS は Android 16 (APIレベル36)です。

おわりに

「空が見えれば、どこでもつながる。」をお客様がさらに実感できるよう、より多くのアプリ開発者さまに衛星データ通信に対応したアプリを開発いただければと思っております。


この記事が参加している募集