電話がかかってきた時の処理を実装するには

音を鳴らすアプリを作っていて、電話がかかってきた時に音が止まらないので止めて欲しいと要望がありました。

このように電話がかかってきた時に何か処理を実装したい場合があります。

そんなときは、以下のようにすれば実装できます。

1.AndroidManifest.xml に以下を追記する。

<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>

2.onCreate()の中に以下のような記述を追加

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

PhoneStateListener psl = new PhoneStateListener() {

public void onCallStateChanged(int state, String number) {

switch(state) {

case TelephonyManager.CALL_STATE_RINGING:

// 着信時の処理

break;

case TelephonyManager.CALL_STATE_OFFHOOK:

// 電話開始時の処理

break;

case TelephonyManager.CALL_STATE_IDLE:

// 電話終了時の処理

break;

};

}

};

tm.listen(psl, PhoneStateListener.LISTEN_CALL_STATE);

ただ、これを実装した後に「以前より電池の消耗が激しくなった」とコメントが来ました・・・。

まぁ電話の状態を常に見るようになるので、たしかにそうかもしれません。そこは妥協するしかないかもですね。。

また、 READ_PHONE_STATE パーミッションを追加することにより、

セキュリティ的にNGと受け取られることもあるようです。

電話番号を取得できるようにする権限と同じなので。

なかなか微妙ですねぇ~。。