我目前正试图让相机在我的应用中工作,而我对整个camera.release()
事情都有疑问;我正在做很复杂的事情而且没有明确的方法来简单地调用camera.release()
所以我必须继续尝试新方法,但每次我弄错了我的应用程序崩溃(如预期的那样),让相机不被释放。因此,为了能够再次测试我的应用程序,我需要重新启动手机才能刷新相机。
有没有办法通过终端或DDMS释放相机,还是通过重新启动手机释放相机的唯一方法?它变得越来越老了,特别是当一个小错误导致浪费时间等待我的手机重新启动时。
谢谢!
答案 0 :(得分:16)
摄像头资源管理由android Camera Service(libcameraservice.so)完成。
运行Camera Service的过程为mediaserver
。如果重新启动媒体服务器,则可以有效释放所有摄像头锁。
您必须具有adb root访问权限才能执行此操作。
运行adb shell; su
以获取root命令提示符。
root@m0:/ # ps|grep media
media 1901 1 129268 6168 ffffffff 4026d470 S /system/bin/mediaserver
media_rw 1909 1 3064 1380 ffffffff 4015f1ac S /system/bin/sdcard
u0_a19 22821 1899 484316 21588 ffffffff 4016d574 S android.process.media
root@m0:/ # kill 1901
kill 1901
现在应该自动启动媒体服务器。
最新版本的Android将mediaserver
二进制文件拆分为多个专用二进制文件,以帮助提高安全性。请阅读official documentation。
因此,您应该寻找mediaserver
而不是cameraserver
。虽然没经过测试。
答案 1 :(得分:3)
我找到了解决这个问题的方法。设置----->应用程序------>管理应用程序----->摄像头--->清除数据,然后问题解决
答案 2 :(得分:3)
我不确定是否有办法通过终端或DDMS重置相机,但我通过我的Activity Camera.release()
方法调用onPause()
,取得了很大的成功,因此,只要应用程序进入后台,相机就会被释放。同样,我的相机初始化全部发生在onResume()
,因此相机将在首次运行时打开,然后在应用程序移入和移出后台时再次释放并重新初始化。这种技术完全消除了你为我描述的问题。
如果问题仍然存在,请考虑在try / catch中包装可能崩溃的代码,在其中捕获任何Exception
并进行调用以释放该catch块中的摄像头。我通常使用这种技术来解决可以在不关闭应用程序的情况下进行平滑的错误,但我相信它会在所有情况下都有效。
答案 3 :(得分:1)
以下是安装UncaughtExceptionHandler
的解决方案:
https://stackoverflow.com/a/17336974/755804
当应用程序死亡时,它会释放相机。
答案 4 :(得分:0)
我正在寻找类似的答案,我发现下面这篇文章可以解决问题
Ideal way to set global uncaught exception Handler in Android
您可以在UncaughtException
处释放相机