我正在尝试访问手机上的相机。在将代码放入小部件之前,我正在编写一个简单的存根应用程序。我还没有走多远。代码总是抛出运行时异常“无法连接到相机服务”错误的代码(从公共软件示例中截取)是:
@Override
public void onResume() {
super.onResume();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
Camera.CameraInfo info = new Camera.CameraInfo();
for (int i = 0; i < Camera.getNumberOfCameras(); i++) {
Camera.getCameraInfo(i, info);
if (info.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
try {
// Gets to here OK
camera = Camera.open(i);
} catch (Exception e) {
e.printStackTrace();
// throws runtime exception :"Failed to connect to camera service"
}
}
}
}
}
我的清单是(10 月 20 日更正):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.nbt.cameratest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="9" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".CameraTestActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</application>
</manifest>
任何人都可以建议什么可能是错误的吗?
10月20日更新
SDK 4.0 中的 Logcat 已损坏,不会显示日志结尾,因此我已从命令行 adb logcat 中尽可能地删除了这一点:
W/ServiceManager( 2588): Permission failure: android.permission.CAMERA from uid=10136 pid=5744
E/CameraService( 2588): Permission Denial: can't use the camera pid=5744, uid=10136
W/System.err( 5744): java.lang.RuntimeException: Fail to connect to camera service
W/System.err( 5744): at android.hardware.Camera.native_setup(Native Method)
W/System.err( 5744): at android.hardware.Camera.<init>(Camera.java:294)
W/System.err( 5744): at android.hardware.Camera.open(Camera.java:255)
etc..
我不知道为什么我没有获得许可,因为它在清单中声明
一些事情:
为什么您的使用权限和使用功能标签位于您的活动标签中。一般来说,权限作为您的直接子项包含在内<manifest>
标签。这可能是问题的一部分。
-
根据安卓相机打开文档 http://developer.android.com/reference/android/hardware/Camera.html#open%28int%29,抛出运行时异常:
如果与摄像头服务的连接失败(例如,如果摄像头正被其他进程使用或设备策略管理器已禁用摄像头)
您是否尝试过检查摄像头是否正在被其他设备使用,或者您的策略管理器是否有某些关闭摄像头的设置?
不要忘记<uses-feature android:name="android.hardware.camera.autofocus" />
用于自动对焦。
虽然我不确定其中任何一个是否会直接帮助您,但我认为如果没有其他原因而不是简单地排除它们,那么它们值得研究。如果愿意的话,尽职调查。
编辑
正如下面的评论中提到的,解决方案是移动uses-permissions
直到应用程序标签上方。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)