39监听去电

2019-04-14 12:13发布

定义一个广播接受者: package com.ustc.mobilemanager.receiver; import com.ustc.mobilemanager.db.dao.NumberAddressQueryUtils; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class OutCallReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 这就是我们拿到的拨出去的电话号码 String phone = getResultData(); // 查询数据库 String address = NumberAddressQueryUtils.queryNumber(phone); Toast.makeText(context, address, 1).show(); } }
getResultData得到的即时拨打的号码。但是这样有个问题,这个广播接受者就算应用死掉了他还是在监听状态中,我们把这个类移到服务中,使用代码注册。 package com.ustc.mobilemanager.service; import com.ustc.mobilemanager.db.dao.NumberAddressQueryUtils; 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; public class AddressService extends Service { private TelephonyManager tm; private MyListenerPhone listenerPhone; private OutCallReceiver outCallReceiver; @Override public IBinder onBind(Intent intent) { return null; } //服务里面的内部类 class OutCallReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 这就是我们拿到的拨出去的电话号码 String phone = getResultData(); // 查询数据库 String address = NumberAddressQueryUtils.queryNumber(phone); Toast.makeText(context, address, 1).show(); } } private class MyListenerPhone extends PhoneStateListener { @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_RINGING:// 来电铃声响起 // 查询数据库的操作 String address = NumberAddressQueryUtils .queryNumber(incomingNumber); Toast.makeText(getApplicationContext(), address, 1).show(); break; default: break; } } } @Override public void onCreate() { super.onCreate(); tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); listenerPhone = new MyListenerPhone(); tm.listen(listenerPhone, PhoneStateListener.LISTEN_CALL_STATE); //代码去注册一个广播接受者 outCallReceiver = new OutCallReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction("android.intent.action.NEW_OUTGOING_CALL"); registerReceiver(outCallReceiver, filter); } @Override public void onDestroy() { super.onDestroy(); tm.listen(listenerPhone, PhoneStateListener.LISTEN_NONE); listenerPhone = null; //取消注册 unregisterReceiver(outCallReceiver); outCallReceiver = null; } }
在onCreate中实例化,在onDestroy中取消注册。



热门文章