输出日志中出现以下错误:
08-20 15:12:19.488 W/CameraBase(14231): An error occurred while connecting to camera: 0
08-20 15:12:19.488 W/CameraBase(14231): Camera service died!
因为摄像服务死了。我得到一个弹出窗口,上面写着“不幸的是,谷歌应用程序已经停止了。”。
当弹出窗口出现时。语音识别停止工作,因为它可以关闭谷歌应用程序。
所以试图打开摄像头会导致摄像头坏掉,这会破坏谷歌,破坏一切。
我把原因隔离到我要放相机的地方。
我发现如果我用调试器一步一步地处理它,它不会导致这个问题。
这使我相信,有一个比赛条件下,相机还没有准备好打开,因为它还没有完全释放前一个电话。
我可以手动插入一个延迟来解决这个问题,但是我更愿意找到一个基于状态或回调的解决方案,它不能猜出正确的延迟。
它有很多评论,因为如何窃听的android相机是这么多的尝试和错误,使其工作。
public async Task<bool> GetCamera()
{
//Android.Hardware.Camera res = null;
Stopwatch sw = new Stopwatch();
sw.Start();
while (sw.ElapsedMilliseconds < 30000)
{
try
{
if (this.cam != null)
{
//this.cam.Unlock();
this.cam.StopPreview();
this.cam.SetPreviewCallback(null);
this.cam.Release();
//this.cam.Dispose();
this.cam = null;
}
this.cam = Android.Hardware.Camera.Open(this.cameraIndex);
//this.EnableHDRecording();
// locking and then unlocking here causes the auto focus to fail
// no idea why
//this.LockCamera();
//this.cam.SetPreviewTexture(surfaceTexture);
this.cam.SetPreviewDisplay(this.previewSurface);
this.cam.StartPreview();
//this.UnlockCamera();
break;
}
catch (Exception x)
{
x.ToString();
}
await Task.Delay(100);
}
if (this.cam == null)
{
throw new System.Exception("Unable to open camera and set preview");
}
return true;
//return res;
}
我怎么知道相机什么时候可以重新打开,这样它就不会因为调用open太快而导致服务崩溃?
如果你想知道我为什么要释放然后需要相机。因为经过一段随机的时间。调用autofocus()时,相机的自动对焦停止工作,直到我重新获取相机后才开始工作。我怀疑这可能是因为我的电话崩溃,重新启动服务,从而重置相机再次工作。
另外,我在android5.1api22上。
暂无答案!
目前还没有任何答案,快来回答吧!