去电就是把电话打出去,来电就是外面的电话打进来。
使用广播接收者实现去电显示。
方法一:静态的注册广播
首先注册一个广播接收者
需要添加权限
广播的代码OutCallReceiver.java
package com.ldw.safe.receiver;
import com.ldw.safe.db.dao.AddressDao;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
/*
* 监听去电 的广播接收者,添加权限PROCESS_OUTGOING_CALLS
*/
public class OutCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//获取到来电的号码
String number = getResultData();
//获取到号码的归属地
String address = AddressDao.getAddress(number);
Toast.makeText(context, address, Toast.LENGTH_LONG).show();
}
}
第二中方法是:动态的注册广播
清单文件中不需要注册广播,让广播接收者跟随者号码归属地显示的receiver一起存在,receiver存在的时候,打开广播,不在的时候关闭广播,这样逻辑更好,归属地开关打开的时候显示
逻辑代码如下AddressService.java
package com.ldw.safe.service;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.widget.Toast;
import com.ldw.safe.db.dao.AddressDao;
/*
* 来电提醒的服务
*/
public class AddressService extends Service {
private TelephonyManager tm;
private MyListener listener;
private OutCallReceiver receiver;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate(){
super.onCreate();
tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
listener = new MyListener();
tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);//监听打电话的状态
receiver = new OutCallReceiver();
IntentFilter filter = new IntentFilter(Intent.ACTION_NEW_OUTGOING_CALL);
registerReceiver(receiver, filter);//动态注册广播
}
class MyListener extends PhoneStateListener{
//监听电话状态的变化
@Override
public void onCallStateChanged(int state, String incomingNumber){
//
switch(state){
//电话铃声响起
case TelephonyManager.CALL_STATE_RINGING:
System.out.println("CALL_STATE_RINGING");
//获取来电的号码归属地
String address = AddressDao.getAddress(incomingNumber);
Toast.makeText(AddressService.this, address, Toast.LENGTH_LONG).show();
break;
default:
break;
}
super.onCallStateChanged(state, incomingNumber);
}
}
/*
* 监听去电 的广播接收者,添加权限PROCESS_OUTGOING_CALLS
*/
class OutCallReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
//获取到来电的号码
String number = getResultData();
//获取到号码的归属地
String address = AddressDao.getAddress(number);
Toast.makeText(context, address, Toast.LENGTH_LONG).show();
}
}
@Override
public void onDestroy(){
super.onDestroy();
//关闭服务,停止来电监听
tm.listen(listener, PhoneStateListener.LISTEN_NONE);
//注销广播
unregisterReceiver(receiver);
}
}
接第三方