在 onReceive 后保持 BroadcastReceiver 处于活动状态

不明确的

我有CallReceiver extends BroadcastReceiver通过MediaRecorder实例记录电话的课程
问题是每次我的服务收到意图时,PhoneCallReceiver都会使用未初始化的记录器创建新实例
因此我不能停止记录。当然我可以将记录器实例存储在静态变量中,但这是肮脏的黑客。
我相信一定有办法让服务保持活力
这是我的接收器类:

public class CallReceiver extends PhoneCallReceiver {
    private static VoiceRecorder recorder; // VoiceRecorder stores MediaRecorder instance 
    @Override
    protected void onIncomingCallReceived(Context ctx, String number, Date start)
    {
        Log.d("phone","onIncomingCallReceived");
    }

    @Override
    protected void onIncomingCallAnswered(Context ctx, String number, Date start)
    {
        Log.d("phone","onIncomingCallAnswered");
        MainActivity.recorder=new VoiceRecorder("incoming_"+number);
        try {
            MainActivity.recorder.start();
        } catch (IOException e) {
            Log.d("phone error",e.getLocalizedMessage());
            e.printStackTrace();
        }
    }

    @Override
    protected void onIncomingCallEnded(Context ctx, String number, Date start, Date end)
    {
        Log.d("phone","onIncomingCallEnded");
        if (MainActivity.recorder!=null) {
            try {
                MainActivity.recorder.stop();
            } catch (Exception e) {
                Log.d("phone record error",e.getLocalizedMessage());
                e.printStackTrace();
            }
            MainActivity.recorder=null;
        }
    }

    @Override
    protected void onOutgoingCallStarted(Context ctx, String number, Date start)
    {
        Log.d("phone","onOutgoingCallStarted "+MainActivity.recorder);
        MainActivity.recorder=new VoiceRecorder("outgoing_"+number);
        try {
            MainActivity.recorder.start();
        } catch (IOException e) {
            Log.d("phone error",e.getLocalizedMessage());
            e.printStackTrace();
        }
    }

    @Override
    protected void onOutgoingCallEnded(Context ctx, String number, Date start, Date end)
    {
        Log.d("phone","onOutgoingCallEnded "+MainActivity.recorder);
        if (MainActivity.recorder!=null) {
            try {
                MainActivity.recorder.stop();
            } catch (IOException e) {
                e.printStackTrace();
            }
            MainActivity.recorder=null;
        }
    }

    @Override
    protected void onMissedCall(Context ctx, String number, Date start)
    {
        Log.d("phone","onMissedCall");
    }

}
共享软件

PhoneCallReceiver不应该有一个MediaRecorder. 它应该委托给具有MediaRecorder. 服务可以保持稳定。作为比较BroadcastReceiver,在清单中注册的一个只存在一次onReceive()调用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Android BroadcastReceiver onReceive在MainActivity中更新TextView

不调用BroadcastReceiver的onReceive

BroadcastReceiver的onReceive方法没有调用吗?

关闭SSH时保持Django Runserver处于活动状态

使用ServerWebSocketContainer时保持与websocket的连接处于活动状态

即使在一个注册后,Android BroadcastReceiver onReceive()在android 5.1.1上调用了两次

如何保持元素:即使单击后仍处于活动状态

回发ASP.Net Core后如何保持选项卡处于活动状态

单击后保持菜单项的onclick处于活动状态

尝试在页面刷新后保持导航栏中的选定div处于活动状态

Android AlarmManager,BroadcastReceiver onReceive从未调用

单击后如何保持Material-UI按钮处于活动状态?

BroadcastReceiver OnReceive()未触发

单击后,SemanticUI按钮仍处于活动状态

如果在AppWidgetProvider中注册了BroadcastReceiver,它会保持活动状态多长时间?

BroadcastReceiver onReceive()线程安全吗?

BroadcastReceiver onReceive()竞争状况/死锁

Android BroadcastReceiver:从onReceive方法获取对象

修改BroadcastReceiver对象的OnReceive()中的图

鼠标离开div后,悬停状态仍处于活动状态

BroadcastReceiver onReceive函数运行两次

不会调用BroadcastReceiver的onReceive方法

运行.sh脚本后如何保持终端会话处于活动状态

单击手风琴图像后保持 DIV 处于活动状态

当应用程序未处于活动状态时保持触摸栏处于活动状态

更改活动时保持线程处于活动状态

保持 TCP 连接处于活动状态

单击后保持元素处于活动状态

NextJS:如何保持按钮处于活动状态?