gpt4 book ai didi

java - 使用服务内的广播接收器检测调用结束

转载 作者:行者123 更新时间:2023-12-02 07:08:33 24 4
gpt4 key购买 nike

我正在编写一个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);

服务运行成功,接收器检测到何时有来电,但应用程序随后崩溃,您知道为什么会发生这种情况吗?感谢您的帮助!

编辑:我解决了这个问题,结果发现我在 list 中写了错误的操作,更改后它并没有崩溃。

但是现在接收器只检测来电,但不检测调用何时接听或结束,它确实检测到几次,但大多数时候都检测不到,铃声在调用结束后仍然打开。通话结束!有什么想法吗?

最佳答案

终于找到办法了!我在将铃声模式设置为静音之前添加了一秒的延迟,我不知道这个解决方案是如何工作的,但它确实如此!

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_IDLE.equals(state))
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
amanager.setRingerMode(0); //Ringer Silent
}
if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(state))
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
amanager.setRingerMode(0); ////Ringer Silent
}
if (TelephonyManager.EXTRA_STATE_RINGING.equals(state))
{
amanager.setRingerMode(2); //Ringer ON
}
}
};

关于java - 使用服务内的广播接收器检测调用结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15818104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com