发布Android相机无需重新启动?

我目前正在试图让我的应用程序的相机工作,我有问题与整个camera.release()东西; 我做了很复杂的东西,没有简单的方法来调用camera.release()所以我必须不断尝试新的方式,但每次我错了我的应用程序崩溃(如预期),让相机不释放。 所以,为了能够再次testing我的应用程序,我需要重新启动我的手机,以刷新相机。

有没有办法通过terminal或DDMS释放摄像头,还是通过重新启动手机来释放摄像头的唯一方法? 现在已经很老了,特别是当一个小小的错误导致等待我的电话重启的时间浪费了。

谢谢!

Solutions Collecting From Web of "发布Android相机无需重新启动?"

相机资源pipe理由Android Camera Service(libcameraservice.so)完成。 运行Camera Service的过程是mediaserver 。 如果重新启动媒体服务器,您将有效释放所有摄像机锁。

您必须拥有adb root权限才能执行此操作。

运行adb shell; su 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 7.0

最新版本的Android将mediaserver二进制文件分成多个专用二进制文件,以帮助提高安全性。 请阅读官方文档 。

所以,而不是mediaserver你应该找cameraserver 。 虽然没有testing过。

我find了解决这个问题的方法。 设置—–>应用程序——>pipe理应用程序—–>摄像机—>清除数据,然后问题就解决了

我不确定是否有通过terminal或DDMS重置摄像头的方法,但是通过将我的调用Camera.release()放在我的Activity的onPause()方法中,我获得了很大的成功,所以摄像头被释放每当应用程序进入后台。 同样,我的相机初始化全部发生在onResume() ,所以相机将在第一次运行时打开,然后释放并重新初始化,当你的应用程序移动和从背景移动。 这种技术已经完全消除了你为我描述的问题。

如果问题仍然存在,还可以考虑包装可能在try / catch中崩溃的代码,在那里捕获任何Exception ,并调用释放该catch块中的相机。 我通常使用这种技术的错误,可以平滑而不closures应用程序,但我相信它会在所有情况下工作。

这是一个解决scheme,安装UncaughtExceptionHandler : https : //stackoverflow.com/a/17336974/755804

它在应用程序死亡时释放相机。

那么我正在寻找类似的答案,我发现这个职位下面可以解决这个问题

在Android中设置全局未捕获的exception处理程序的理想方法

您可以在UncaughtException中释放相机