我目前正在尝试让摄像头在我的应用程序中工作,我遇到了整个camera.release()
的问题;我正在做非常复杂的事情,没有明确的方法来简单地调用camera.release()
,所以我必须不断尝试新的方法,但每次我出错时,我的应用程序都会崩溃(正如预期的那样),导致摄像头没有发布。因此,为了能够再次测试我的应用程序,我需要重启手机以刷新摄像头。
有没有办法通过终端或DDMS释放摄像头,或者只有重启手机才能释放摄像头?它变得相当陈旧,特别是当一个小错误导致浪费时间等待我的手机重启。
谢谢!
发布于 2013-11-11 22:18:00
摄像头资源管理由安卓摄像头服务(libcameraservice.so)完成。运行Camera Service的进程是mediaserver
。如果您重新启动媒体服务器,您将有效地释放所有相机锁定。
您必须具有adb root访问权限才能执行此操作。
运行adb shell; su
获取根目录命令提示符。
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 7.0
最新版本的安卓系统将mediaserver
二进制文件拆分为多个专用的二进制文件,以提高安全性。在official documentation中阅读更多内容。
因此,您应该查找cameraserver
,而不是mediaserver
。虽然没有经过测试。
发布于 2013-06-24 23:40:24
我不确定是否有办法通过终端或DDMS重置摄像头,但我已经通过在Activity的onPause()
方法中调用Camera.release()
获得了很大成功,所以每当应用程序进入后台时,摄像头都会被释放。类似地,我的相机初始化都是在onResume()
中进行的,所以相机会在第一次运行时打开,然后在你的应用程序来回移动到后台时再次释放并重新初始化。这项技术完全消除了您为我描述的问题。
如果问题仍然存在,还可以考虑在try/catch中包装可能崩溃的代码,在该代码中捕获任何Exception
并调用该catch块中的camera释放。我通常使用这种技术来处理错误,这些错误可以在不关闭应用程序的情况下修复,但我相信它在所有情况下都会起作用。
发布于 2012-07-10 10:55:54
我找到了一个解决这个问题的方法。设置->应用程序->管理应用程序->摄像头->清除数据,问题就解决了
https://stackoverflow.com/questions/8132273
复制相似问题