1.电话会有个广播PhoneReceiver 。 代码都贴出来。
2.在配置文件中配置:
<receiver android:name="com.example.testpic.PhoneReceiver" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
<action android:name="android.intent.action.BOOT_COMPLETED" >
</action>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</receiver>
广播监听:
public class PhoneReceiver extends BroadcastReceiver {
private int lastCallState = TelephonyManager.CALL_STATE_IDLE;
private boolean isIncoming = false;
private static String contactNum;
Intent audioRecorderService;
OkHttpClient httpClient;
SharedPreferences sharedPreferences;
String type;
Bitmap bitmap;
Context context;
@Override
public void onReceive(Context context, Intent intent) {
this.context =context;
ConstantUtil.isCall=true; //判断是否在通话中
//如果是去电
if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){
contactNum = intent.getExtras().getString(Intent.EXTRA_PHONE_NUMBER);
}else //android.intent.action.PHONE_STATE.查了下android文档,貌似没有专门用于接收来电的action,所以,非去电即来电.
{
String state = intent.getExtras().getString(TelephonyManager.EXTRA_STATE);
String phoneNumber = intent.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
int stateChange = 0;
if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)){
ConstantUtil.isCall =false;
//空闲状态
stateChange =TelephonyManager.CALL_STATE_IDLE;
if (isIncoming){
onIncomingCallEnded(context,phoneNumber);
}else {
onOutgoingCallEnded(context,phoneNumber);
}
}else if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){
//摘机状态
ConstantUtil.isCall =false;
stateChange = TelephonyManager.CALL_STATE_OFFHOOK;
if (lastCallState != TelephonyManager.CALL_STATE_RINGING){
//如果最近的状态不是来电响铃的话,意味着本次通话是去电
isIncoming =false;
onOutgoingCallStarted(context,phoneNumber);
}else {
//否则本次通话是来电
isIncoming = true;
onIncomingCallAnswered(context, phoneNumber);
}
}else if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)){
//来电响铃状态
ConstantUtil.isCall =false;
stateChange = TelephonyManager.CALL_STATE_RINGING;
lastCallState = stateChange;
onIncomingCallReceived(context,contactNum);
}
}
}
protected void onIncomingCallStarted(Context context,String number){
Toast.makeText(context, "0", 0).show();
}
protected void onOutgoingCallStarted(Context context,String number){
//正在通话中会走这个方法。在这里处理自己的逻辑
putRed(context);
}
protected void onIncomingCallEnded(Context context,String number){
Toast.makeText(context, ConstantUtil.Ad_id, 0).show();
}
protected void onOutgoingCallEnded(Context context,String number){
//电话挂断时候会走这个方法。在这里处理自己的逻辑
ConstantUtil.isCall =true;
Intent intent =new Intent(context,MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
protected void onIncomingCallReceived(Context context,String number){
Toast.makeText(context, "4", 0).show();
}
protected void onIncomingCallAnswered(Context context, String number) {
Toast.makeText(context, "5", 0).show();
}
}
暂时没发现不适宜的机型。
代码看上去有点乱。自己放编辑器理一下!