0

我有一个可以进行后台视频录制的服务,在此期间我禁用了 Keyguard。当我想停止录制时,我会停止服务并调用 OnDestroy()。

我可以在我的跟踪中看到ReenableKeyguard()被调用的。但是,在我“强制停止”启动服务的主机应用程序之前,Keyguard 仍处于禁用状态。

什么可能导致 Keyguard 在ReenableKeyguard()被调用时保持禁用状态?

这是破坏服务并重新启用键盘保护的代码。(它是 C#/Xamarin 但与 Java 基本相同)

    public override void OnDestroy()
    {
        Tracer.Trace("BackgroundVideoRecorder::OnDestroy();");
        base.OnDestroy();

        try
        {
            camera.Reconnect();
            mediaRecorder.Stop();
            mediaRecorder.Reset();

            camera.StopPreview();
            mediaRecorder.Release();

            camera.Release();
            camera = null;

            if (Common.KeyGuardLocker != null)
            {
                Tracer.Trace("BackgroundVideoRecorder::OnDestroy() - ReenableKeyguard()");
                Common.KeyGuardLocker.ReenableKeyguard();
            }

            windowManager.RemoveView(surfaceView);
        }
        catch (Exception ex)
        {
            Tracer.Trace(ex);
        }
    }
4

1 回答 1

1
I have the exact same problem and the reason was that i had only permissions to Disable keyguard and not the ones to re-enable it.

android.permission.DISABLE_KEYGUARD android.permission.ENABLE_KEYGUARD

于 2015-03-01T06:11:48.643 回答