我正在编写一个Android应用程序,我需要在服务中运行广播接收器,接收器检测何时有来电以及何时结束或接听电话,服务将手机置于静音模式,接收器检测何时有来电,如果有来电,接收器将振铃模式设置为正常振铃和振动,当来电被接听或结束时,接收器再次将振铃器设置为静音模式。
这是我的接收器:
private final BroadcastReceiver CallReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
AudioManager amanager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
amanager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if (TelephonyManager.EXTRA_STATE_RINGING.equals(state))
{
amanager.setRingerMode(2); //Ringer ON
}
if (TelephonyManager.EXTRA_STATE_IDLE.equals(state))
{
amanager.setRingerMode(0); //Ringer Silent
}
if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(state))
{
amanager.setRingerMode(0); ////Ringer Silent
}
}
};
在我的服务中的 onStartCommand 方法中:
IntentFilter filter = new IntentFilter();
filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
registerReceiver(CallReceiver, filter);
该服务正在成功运行,并且接收器检测到何时有来电但应用程序随后崩溃,任何想法为什么会发生这种情况?感谢您的帮助!
编辑:我解决了这个问题,原来我在清单中写了错误的操作,更改后它不会崩溃。
但是现在接收器只检测到来电,但没有检测到电话何时接听或结束,它确实检测到了几次,但大多数时候它没有检测到,通话结束后铃声仍然打开!有任何想法吗?