为什么相机在 Android 5 中不工作?
Why camera not work in Android 5?
在 android 2.3、4、4.1、4.2、4.3、4.4 中正常工作
我用 android 2.3 api:
来实现这个功能
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// 1º Si se esta viendo preview, se detiene
if (mPreviewRunning) {
mCamera.stopPreview();
}
// 2º Se setean los nuevos parametros de la camara
Camera.Parameters p = mCamera.getParameters();
p.setPreviewSize(w, h);
mCamera.setParameters(p);
// 3º Volvemos a mostrar el preview
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(ctxt, "Error refreshing camera", Toast.LENGTH_LONG)
.show();
}
mCamera.startPreview();
mPreviewRunning = true;
}
应用程序崩溃,return
错误:W/System.err:java.lang.RuntimeException:无法连接到相机服务
mCamera.setParameters(p);
在 return 之后:
W/System.err: java.io.IOException: 打开失败: ENOENT (没有那个文件或目录)
这是我的两个应用程序的清单:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.foca.deboSancion"
android:versionCode="4"
android:versionName="14.7" >
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.foca.deboComun"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-feature android:name="android.hardware.camera" />
<uses-sdk android:minSdkVersion="8" />
好吧 mCamera.setParameters(p);
不是 lollypop(android 5.0) api 问题,它的设备特定。大多数带有相机参数的设备行为都是最终的,我的意思是你不能改变它,如果你尝试它会崩溃。使用 try catch 的简单可能解决方案,高级是使用反射(建议:不要这样做)
在 android 2.3、4、4.1、4.2、4.3、4.4 中正常工作
我用 android 2.3 api:
来实现这个功能public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// 1º Si se esta viendo preview, se detiene
if (mPreviewRunning) {
mCamera.stopPreview();
}
// 2º Se setean los nuevos parametros de la camara
Camera.Parameters p = mCamera.getParameters();
p.setPreviewSize(w, h);
mCamera.setParameters(p);
// 3º Volvemos a mostrar el preview
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(ctxt, "Error refreshing camera", Toast.LENGTH_LONG)
.show();
}
mCamera.startPreview();
mPreviewRunning = true;
}
应用程序崩溃,return
错误:W/System.err:java.lang.RuntimeException:无法连接到相机服务
mCamera.setParameters(p);
在 return 之后:
W/System.err: java.io.IOException: 打开失败: ENOENT (没有那个文件或目录)
这是我的两个应用程序的清单:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.foca.deboSancion"
android:versionCode="4"
android:versionName="14.7" >
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.foca.deboComun"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-feature android:name="android.hardware.camera" />
<uses-sdk android:minSdkVersion="8" />
好吧 mCamera.setParameters(p);
不是 lollypop(android 5.0) api 问题,它的设备特定。大多数带有相机参数的设备行为都是最终的,我的意思是你不能改变它,如果你尝试它会崩溃。使用 try catch 的简单可能解决方案,高级是使用反射(建议:不要这样做)