Android電話状態の傍受(着信と発信)PhoneStateListenerとTelephonyManager
2582 ワード
今日のプログラムでは、電話の状態が変わったときに起動(着信、受話器、切断、電話をかける)することができますが、電話をかけるときに相手が受話器に出るかどうか、音声メールを回すかどうかなどを判断することはできません.Androidは電話の状態が変わるとandroidにactionを送信します.intent.action.PHONE_STATEのアナウンスで、電話をかけるとandroidとしてactionが送信されます.intent.action.NEW_OUTGOING_CALLの放送ですが、開発文書を見てみましたが、着信時の放送はしばらく見つかりませんでした.これを知っていればやりやすいので、BroadcastReceiverを書いてこの2つの放送を受信すればいいです.
AndroidManifestでxml登録ブロードキャスト受信機:
権限も追加します.
変換元:http://www.pocketdigi.com/20110725/417.html
package com.pocketdigi.phonelistener;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
public class PhoneReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
System.out.println("action"+intent.getAction());
if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){
// ( )
System.out.println(" ");
}else{
// android , action, ,
System.out.println(" ");
TelephonyManager tm = (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);
tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
//
}
}
PhoneStateListener listener=new PhoneStateListener(){
@Override
public void onCallStateChanged(int state, String incomingNumber) {
// TODO Auto-generated method stub
//state incomingNumber, API
super.onCallStateChanged(state, incomingNumber);
switch(state){
case TelephonyManager.CALL_STATE_IDLE:
System.out.println(" ");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
System.out.println(" ");
break;
case TelephonyManager.CALL_STATE_RINGING:
System.out.println(" : "+incomingNumber);
//
break;
}
}
};
}
AndroidManifestでxml登録ブロードキャスト受信機:
<receiver android:name=".PhoneReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"/>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
権限も追加します.
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"></uses-permission>
変換元:http://www.pocketdigi.com/20110725/417.html