我按照玻璃指南拍照,找到here。但是,这会创建一个新的Intent,可以自动捕获图片而无需在Glass视口中创建相机预览。
为了让用户首先预览相机在玻璃'视口上看到的内容,我按照Android开发人员指南找到了here,并最终遇到了尝试调用时抛出的运行时异常Camera.open()
:
java.lang.RuntimeException: Fail to connect to camera service
开发人员指南将Camera.open()
包装在try-catch子句中,但没有解释在引发异常的情况下该怎么做。
以下是我的问题:
感谢您的帮助!
答案 0 :(得分:1)
将权限放在清单文件
中的Application标记之上<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus"/>
<application>
<activity></activity>
</application>
我将权限保留在错误的位置,这就是为什么我不断得到同样的错误!希望这对你也有帮助。
答案 1 :(得分:0)
请查看以下代码段,其中显示了在camera.open()中获取相机,然后在拍摄照片时释放。
public class CameraView extends SurfaceView implements SurfaceHolder.Callback
{
private SurfaceHolder surfaceHolder = null;
private Camera camera = null;
@SuppressWarnings("deprecation")
public CameraView(Context context)
{
super(context);
surfaceHolder = this.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public void surfaceCreated(SurfaceHolder holder)
{
camera = Camera.open();
// Set the Hotfix for Google Glass
this.setCameraParameters(camera);
// Show the Camera display
try
{
camera.setPreviewDisplay(holder);
}
catch (Exception e)
{
this.releaseCamera();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
// Start the preview for surfaceChanged
if (camera != null)
{
camera.startPreview();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
// Do not hold the camera during surfaceDestroyed - view should be gone
this.releaseCamera();
}
public void setCameraParameters(Camera camera)
{
if (camera != null)
{
Parameters parameters = camera.getParameters();
parameters.setPreviewFpsRange(30000, 30000);
camera.setParameters(parameters);
}
}
public void releaseCamera()
{
if (camera != null)
{
camera.release();
camera = null;
}
}
}
这是一个有效的代码。前面的详细信息请查看以下tutorial。
希望这会有所帮助!!
答案 2 :(得分:0)
想出来。在我的AndroidManifest.xml
中,我将权限和功能请求放在application
下,而不是直接放在manifest
下:
<强>之前:强>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.my.organization">
<application
android:name=".MyApp"
android:allowBackup="true"
android:label="@string/app_name">
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.Camera" />
<强>后:强>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.my.organization">
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.Camera" />
<application
android:name=".MyApp"
android:allowBackup="true"
android:label="@string/app_name">