Androidに着信が来た際に、誰からの着信なのか電話番号を元に検索する方法です。
本プログラムを実行するには AndroidManifest.xml に READ_PHONE_STATE のパーミッションが必要です。
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
Androidでは様々なイベントが定義されており、発火したタイミングでOSから通知が飛びます。
本当は着信の通知を受け取りたいのですが、着信だけを通知してくれる便利なイベントは存在しません。
その代わりに、Androidの通話状態が変わる度に通知してくれるイベントが存在しており、
PhoneStateListener によってイベントがキャッチ出来るようになっています。
PhoneStateListener を実装したインスタンスを定義して着信をハンドリングしましょう。
PhoneStateListener mListener = new PhoneStateListener(){ @Override public void onCallStateChanged(int state, String number) { switch(state) { case TelephonyManager.CALL_STATE_RINGING: //着信を示すイベント Log.d(TAG, number); // numberに電話番号が入る break; } } };
Androidで電話に関するシステムの制御は TELEPHONY_SERVICE を通じて行われます。
ActivityクラスやServiceクラス等のContextを持ったインスタンスから、TelephonyManagerに
先ほど作成したリスナーを登録しましょう。
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); telephonyManager.listen(mListener, PhoneStateListener.LISTEN_CALL_STATE);
これで着信イベントの発生によって定義した PhoneStateListener が発火します。
弊社では開発しているクラウドCTI製品にAndroid対応させる為、同様のプログラムを実装ています。
Android対応のCTIの実装事例