2017-01-20 167 views
9

API 21以降、特にTelecomManagerのメンバーを追加し、InCallServiceを追加することで、GoogleはAPI21以降、一般にandroid.telecomに機能を追加しています。この最後の1つは、システム以外のサードパーティのアプリケーションがシステムコールアプリのコール画面の機能を提供したり置き換えたりできるようになっていることです。EXTRA_STATE_OFFHOOKまたはEXTRA_STATE_RINGINGブロードキャスト(つまり、着信と発信電話)。android.telecomとInCallServiceを使用して着信に応答する

現在のところ、この画面ではルート制限されたMODIFY_PHONE_STATEの許可と、リフレクションでもアクセスできないセキュリティ保護された多くのAOSPコードによって、きめ細かい情報の呼び出しおよびアクティブなコールと関連付けられたシステムコールバックを完全に制御できます。特に、製造元のROMの味の中で、ランチャー、連絡先、カメラとともに、最も変更されたコードの1つです。

これはどのようにあなたが実際にサードパーティのInCallServiceを開発するんすべての非常にきれいけど...

のですか?

すなわち:あなたがについて通知を受けるにはどうすればよい

  1. 、およびGSMのインスタンスを取得する方法1は、このクラスのコールバックのライフサイクルとは何か、これらの呼び出し
  2. に答えるん
  3. 呼び出し
  4. Googleは私はしません

を発見していない。このため、実際のチュートリアルを提供していますskは一度にこれらすべての答えを返しますが、いずれかの答えはおそらく他の質問と関連しています。これは広範囲ではあるが、本質的には、AOSPコード以外のウェブ上での例はなく、そのコードはルート特権の前提に基づいているため、サードパーティのアプリケーション開発では使用できなくなる目的。

+0

あなたの質問#1のために、 'android.intent.action.PHONE_STATE'放送は動作しませんか? –

+0

@SharpEdgeあなたは「呼び出し」を通知されますが、あなたはどのandroid.telecom.Callかわかりません - https://developer.android.com/reference/android/telecom/Call.htmlちょうどコール#答え(int videoState)を取得し、2を取得します。 – leRobot

+0

そこに多くの情報があるようには思われません - この質問のコメントが役立つかもしれません:http://stackoverflow.com/q/34861910/334402 。明確でない場合に注意するべきことの1つは、このAPIはInCallUI、つまり呼び出しを制御するユーザーインターフェイスを置き換えることです。 – Mick

答えて

2

Replacing in call appの2番目のコメントのアドバイスに従います。さらに、InCallServiceインターフェイスを実装するサービスが必要です。呼び出しが到着すると、onCallAdded(Call call)メソッドが呼び出され、呼び出しオブジェクトへの参照が与えられます。

<service 
    android:name=".InCallServiceImplementation" 
    android:enabled="true" 
    android:exported="true" 
    android:permission="android.permission.BIND_INCALL_SERVICE"> 

    <meta-data 
    android:name="android.telecom.IN_CALL_SERVICE_UI" 
    android:value="true" /> 

    <intent-filter> 
    <action android:name="android.telecom.InCallService" /> 
    </intent-filter> 
</service> 

呼び出しオブジェクトを取得したら、call.answer()と同じように簡単に応答します。私はあなたが上記の作業を上回ったら、いくつかのテストコールを実行して、いつ異なるコールバックが呼び出されるかを知ることをお勧めします。

チュートリアルについて

私はこれに探していたとき、私はいずれかを見つけることができませんでしたが、それは...一年以上前にこのことができます

希望でした!

+0

いいえ、今日のテスト実装を試して、結果を返す – leRobot

+0

こんにちはIeRobot、あなたはInCallServiceを試しましたか?私のケースでは、着信呼と発信呼び出しが呼び出されていません。 – rajahsekar

4

私は明らかにAndroid 8で、新しい許可が最終的にallows answering calls through a 3rd party dev-facing permissionのため、この質問を読んでいるはずです。

android.permission ANSWER_PHONE_CALLS(...API 26のドキュメントはまだ発売されていないため)、アプリはまだかかわらず、 、着信電話プログラムで

ありません詳細を答えることができます。私はこの回答を更新するようにしています。

関連する問題