101.s1-去电的归属地显示

2019-04-14 15:56发布

去电就是把电话打出去,来电就是外面的电话打进来。 使用广播接收者实现去电显示。 方法一:静态的注册广播 首先注册一个广播接收者 需要添加权限 广播的代码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); } }           接第三方