监听拨打电话,通过广播接收器Android应用从系统这边监听用户是否在拨打电话,不需要再activity中调用,当系统发出与自定义广播接收器匹配的广播后,会进入到广播接收器的相应操作中。具体的响应在BroadcastReceiver里面的里面的onReceive方法中实现。
首先创建自定义广播接收器,让他继承自系统广播接收器BroadReceiver
package com.example.jack.broadcastforcall.MyBraodcastReceiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
/**
* 分别打印两行log如下
* E/TAG: 打电话13644876837
* E/TAG: +8613644876837
*/
public class BroadCastReceiverForCall extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.e("TAG","打电话"+getResultData());
// 获得广播监听到的数据
String phone = getResultData();
String newPhone = "+86"+phone;
// 设置广播监听到的数据
setResultData(newPhone);
Log.e("TAG",getResultData());
}
}
广播是Android四大组件之之一,所以使用广播,在创建好广播接收器之后一定要记得在mainfest文件中注册广播接收器,receiver是广播标签,在intent-filter中描述广播接收器的类型。
<receiver android:name=".MyBraodcastReceiver.BroadCastReceiverForCall">
<!--自定义广播接收器类型-->
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
</intent-filter>
</receiver>
另外需要注意的是广播监听的类别是否涉及用户权限,不要忘记在mainfest文件中申请权限。
<!--监听用户拨打电话需要获取隐私权限-->
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>