import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.widget.Toast;
import com.example.mobilesaf.dao.AddressDao;
/**
* 此服务用于监听电话状态,来电的时候显示电话归属地的
*
* 为何不用打电话的广播接收者?因为打电话的广播接收者不能判断到底是去电还是来电。
* @author Administrator
*
* 步骤:
* 1.在Service中的onCreate方法中添加监听
* 2.在Service中的onDestroy方法中取消监听
*
*/
public class ShowAddressService extends Service {
private TelephonyManager tm;
private MyListener listener;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
//获取电话管理器
tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
listener = new MyListener();
//添加电话状态监听
tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
}
/**
* 用于监听电话的通话状态
* 响铃
* 摘机(通话)
* 空闲
*/
private class MyListener extends PhoneStateListener{
private AddressDao dao = new AddressDao(getApplicationContext());
//覆写该方法,当电话状态改变的时候执行该方法
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_RINGING://响铃状态
String location = dao.getAddress(incomingNumber);
Toast.makeText(getApplicationContext(), location,
Toast.LENGTH_SHORT).show();
break;
case TelephonyManager.CALL_STATE_OFFHOOK://摘机状态(通话状态)
break;
case TelephonyManager.CALL_STATE_IDLE://空闲状态
break;
}
}
}
@Override
public void onDestroy() {
super.onDestroy();
tm.listen(listener, PhoneStateListener.LISTEN_NONE);//取消电话状态监听
}
}
在服务中监听电话的通话状态
最新推荐文章于 2023-09-28 16:59:13 发布