モバイル向けガイドライン — Android
このトピックでは、Android デバイス向けのアプリを開発する際の考慮事項について説明します:
アクセス許可
OpenTok Android SDK で必要な権限については、以下を参照してください。 「権限」セクション Android SDKの概要のうち。
AndroidのConnectionServiceを使用したVoIPアプリの作成
Android を使用する 接続サービス OpenTok Android SDKの音声・動画機能を活用したVoIPアプリを作成するためのクラス。
基本的なVoIPアプリを作成するには、少なくとも以下のガイドラインに従ってください:
-
を登録する。
android.telecom.ConnectionServiceをAndroidManifest.xmlファイルに追加します。コピー<service android:name="com.example.package.MyConnectionService" android:label="@string/some_label_for_my_connection_service" android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE"> <intent-filter> <action android:name="android.telecom.ConnectionService" /> </intent-filter> </service> -
を継承したクラスを作成する。
android.telecom.ConnectionServiceクラスのメソッドを実装する。のメソッドを実装する。ConnectionServiceクラスを含むonCreateIncomingConnection(),onCreateOutgoingConnection,onCreateIncomingConnectionFailed()そしてonCreateOutgoingConnectionFailed(). -
を継承したクラスを作成する。
android.telecom.Connectionクラスのメソッドを実装する。のメソッドを実装する。Connectionクラスを含むonAnswer()そしてonDisconnect.を実施した。onAnswer()このメソッドを使用すると、OpenTok セッションに接続し、そのセッションにストリームを配信し、セッション内で作成されたストリームをコードから購読できるようにすることができます。このonDisconnect()このメソッドを使用すると、OpenTokセッションからの切断(およびストリームのパブリッシュとサブスクライブの停止)を行うことができます。 -
Google Firebaseのようなサービスを使って、アプリのプッシュ通知を実装することができる。アプリがバックグラウンドにある時や閉じている時に通知を設定することができる。こうすることで、アプリが閉じている状態でもVoIPコールを受信することができます。
ConnectionService を使用する際は、 AudioDeviceManager.getAudioFocusManager() メソッドを使用し、返された AudioFocusManager インスタンスのメソッドを実装することで、オーディオフォーカスの制御をアプリに委譲します。これらは OpenTok Android SDK に定義されています:
private AudioDeviceManager audioDeviceManager;
private AudioFocusManager audioFocusManager;
public void setupAudioFocusManager(Context context) {
audioDeviceManager = new AudioDeviceManager(context);
audioFocusManager = audioDeviceManager.getAudioFocusManager();
audioFocusManager.setRequestAudioFocus(false);
}
public void notifyAudioFocusIsActive() {
audioFocusManager.audioFocusActivated();
}
public void notifyAudioFocusIsInactive() {
audioFocusManager.audioFocusDeactivated();
}
アプリにオーディオフォーカスを委譲すると、SDKは自動オーディオルーティングを停止します。代わりに、このルーティングロジックはConnectionServiceによって処理され、ConnectionのCallEndpointおよびCallAudioState APIを通じて、利用可能なオーディオデバイスに関する情報をアプリに通知します。アプリ側では、オーディオデバイスの列挙および選択ロジックへの対応を実装する必要があります。
この権限委譲により、適切なオーディオ・ルーティングとアンドロイド・テレコム・システムとの連携が保証される。
参照 サンプルVOIPアプリ opentok-android-sdk-samples リポジトリ内にあります。ここでは、OpenTok Android SDK を使用した VoIP アプリを作成するために、ConnectionService クラスを実装する方法を示しています。
フォアグラウンドサービスの設定
フォアグラウンドサービスを使用すると、ユーザーに認識される操作を非同期で実行できます。フォアグラウンドサービスはステータスバー通知を表示し、アプリがフォアグラウンドでタスクを実行しており、システムリソースを消費していることをユーザーに知らせます。ConnectionService はフォアグラウンドサービスとして使用できる点に注意してください。フォアグラウンドサービスを利用するユースケースの例としては、次のようなものがあります:
-
ユーザーが別のアプリを開いても、音声をキャプチャしてピアに送信し続けます。
-
ユーザーがアプリを切り替えながら画面を共有できるようにする。
-
ユーザーがビデオ通話を聞き続けながら、画面をオフにできるようにする。
フォアグラウンド・サービスの種類
Android 10 では、`<Service>` 要素内に `android:foregroundServiceType` 属性が導入されました。これは、サービスがどのような処理を行うかを明示的に指定することを目的としています。
Android 14では、フォアグラウンド・サービス・タイプの指定が必須となった。これは、フォアグラウンド・サービスの正しい使い方と、デバイス・メーカー間の一貫性を確保するためである。
現在サポートされているタイプは以下の通り:
-
camera(Android 11で必須) — ビデオ通話アプリなど、バックグラウンドからカメラにアクセスする場合 -
connectedDevice— Bluetooth対応のフィットネスデバイスなどの外部デバイスと連携する場合 -
dataSync— データのアップロードやダウンロードを行う場合、この機能は非推奨となるため、代わりにDownloadManager、BackupManager、またはWorkManagerなどの代替機能を使用してください -
health(Android 14の新機能) — エクササイズトラッカーなどのフィットネスアプリ向け -
location(Android 10で必須) — ナビゲーションなど、位置情報の取得が必要な場合 -
mediaPlayback— SpotifyやNetflixなど、バックグラウンドからオーディオや動画の再生を再開する場合 -
mediaProjection— 外部のデバイスや画面にコンテンツを投影する場合 -
microphone(Android 11で必須)— 通話アプリなど、バックグラウンドからマイクにアクセスする場合 -
phoneCall— 通話中の通話を続ける場合 -
remoteMessaging(Android 14の新機能) - テキストメッセージをあるデバイスから別のデバイスに転送する場合 -
shortService— 中断できない重要な作業を迅速に完了させる必要がある場合(実行時間は約3分間に限定されます) -
specialUse— 他のタイプでは使用ケースをカバーできない場合 -
systemExempted— システムアプリ専用
フォアグラウンド・サービスタイプの宣言
Android 14をサポートする最初のステップは、AndroidManifestファイルのサービス宣言を更新し、正しいフォアグラウンド・サービス・タイプを指定することです。
あなたのサービスが複数のタイプを必要とする場合、次のように|演算子を使用してそれらを組み合わせることができます:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>
<service
android:name=".MyForegroundService"
android:foregroundServiceType="microphone|camera"
android:exported="false">
</service>
</manifest>
マニフェストでそのタイプを宣言せずにフォアグラウンドサービスを開始しようとすると、システムは MissingForegroundServiceTypeException 電話すると startForeground().
特定のフォアグラウンドサービスの権限をリクエストする
Android 9(API 28)以降、アプリは FOREGROUND_SERVICE 権限が自動的に付与されました。
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
Android 14(API 34)以降、アプリはフォアグラウンドサービスの種類に応じて、追加で特定の権限を要求する必要があります。したがって、サービスがバックグラウンドでマイクに継続的にアクセスする場合は、以下を指定する必要があります。 FOREGROUND_SERVICE_MICROPHONE.許可はシステムによって自動的に付与される。
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE"/>
サービスで複数のタイプが必要な場合は、タイプごとにこの権限を宣言する必要があります。
この2つの許可のどちらかを申告し忘れると、次のようなメッセージが表示されます。 SecurityException その正確な理由とともに。
フォアグラウンド・サービスを起動する
使用するAPIレベルに応じて、次のようにサービスを起動してください:
Intent serviceIntent = new Intent(this, MyForegroundService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Android 8.0 (API 26) and above
startForegroundService(serviceIntent);
} else { // Android 7.0 (API 24, 25)
startService(serviceIntent);
}
このコードスニペットはサービスを起動します。ただし、このサービスはまだフォアグラウンドで実行されていません。サービス内部では、次の呼び出しを行う必要があります。 startForeground() サービスをフォアグラウンドサービスに昇格させるには。AndroidX を使用している場合は、 ServiceCompat.startForeground().
Google Play Consoleでユースケースの詳細を入力してください。
Android 14をターゲットとし、フォアグラウンドサービスタイプを使用するアプリの新バージョンをGoogle Play Consoleにアップロードすると、コンソールに使用状況に関する追加情報を提供するプロンプトが表示されます。
Googleはアプリがフォアグラウンドサービスを適切に使用していることを確認したいため、アプリのコンテンツページ(ポリシー -> アプリのコンテンツ)で新しい宣言を提出する必要があります。
宣言する各フォアグラウンド・サービス・タイプについて、以下を実行する必要がある:
-
フォアグラウンド・サービス・タイプを使用しているアプリの機能について説明してください。
-
タスクがシステムによって延期または中断された場合のユーザーへの影響を記述する。
-
各フォアグラウンド・サービス機能のデモ動画へのリンクを含めること。ビデオでは、ユーザーがアプリ内でその機能をトリガーするために必要な手順を示す必要があります。
-
各フォアグラウンド・サービス・タイプについて、特定のユースケースを選択してください。あらかじめ設定されているユースケースのリストから選択するか、手動で入力することができます。
サンプルアプリと詳細情報
参照 Javaを使用したForegroundServicesを用いた基本的なビデオチャット サンプルの opentok-android-sdk-samples レポ。
詳しくはアンドロイド フォアグラウンド・サービスの概要 ドキュメンテーション
詳細情報
詳細については、以下を参照してください: