Java android-尝试打开前摄像头时出现异常
我无法获取前向摄像头(摄像头id 1)的图像<代码>打开cam#1失败在我尝试运行以下代码时出现在屏幕上 附上一个片段。任何帮助都将不胜感激(我正在Nexus4上试用) Tester.javaJava android-尝试打开前摄像头时出现异常,java,android,android-intent,Java,Android,Android Intent,我无法获取前向摄像头(摄像头id 1)的图像打开cam#1失败在我尝试运行以下代码时出现在屏幕上 附上一个片段。任何帮助都将不胜感激(我正在Nexus4上试用) Tester.java package com.example.cam; import java.util.HashMap; import java.util.Iterator; import android.annotation.SuppressLint; import android.app.Activity; import an
package com.example.cam;
import java.util.HashMap;
import java.util.Iterator;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.Menu;
import android.widget.Toast;
public class Tester extends Activity {
private static final int[] camIds = { Camera.CameraInfo.CAMERA_FACING_BACK, Camera.CameraInfo.CAMERA_FACING_FRONT };
@SuppressLint("UseSparseArrays")
private final HashMap<Integer, Camera> camMap = new HashMap<Integer, Camera>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return true;
}
@Override
protected void onResume() {
super.onResume();
if (!checkCameraHardware())
finish();
getCameras();
releaseCamera();
}
@Override
protected void onPause() {
super.onPause();
releaseCamera();
}
@Override
protected void onStop() {
super.onStop();
releaseCamera();
}
@Override
protected void onDestroy() {
super.onDestroy();
releaseCamera();
}
private final void doToast(final String message) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
private final void getCameras() {
for (int camId : camIds)
try {
camMap.put(camId, Camera.open(camId));
doToast("open cam #" + camId + " succeeded");
} catch (Exception e) {
doToast("open cam #" + camId + " failed");
}
}
private final void releaseCamera() {
final Iterator<Integer> iter = camMap.keySet().iterator();
while (iter.hasNext())
camMap.remove(iter.next()).release();
}
private final boolean checkCameraHardware() {
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA))
return camIds.length <= Camera.getNumberOfCameras();
else
return false;
}
}
package com.example.cam;
导入java.util.HashMap;
导入java.util.Iterator;
导入android.annotation.SuppressLint;
导入android.app.Activity;
导入android.content.pm.PackageManager;
导入android.hardware.Camera;
导入android.os.Bundle;
导入android.view.Menu;
导入android.widget.Toast;
公共类测试仪扩展活动{
private static final int[]camIds={Camera.CameraInfo.Camera_faceting_BACK,Camera.CameraInfo.Camera_faceting_FRONT};
@SuppressLint(“UseSparsearray”)
private final HashMap camMap=new HashMap();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
返回true;
}
@凌驾
受保护的void onResume(){
super.onResume();
如果(!checkCameraHardware())
完成();
getCameras();
松开摄像头();
}
@凌驾
受保护的void onPause(){
super.onPause();
松开摄像头();
}
@凌驾
受保护的void onStop(){
super.onStop();
松开摄像头();
}
@凌驾
受保护的空onDestroy(){
super.ondestory();
松开摄像头();
}
专用最终void doToast(最终字符串消息){
Toast.makeText(this,message,Toast.LENGTH_SHORT).show();
}
私人最终作废{
用于(int camId:camId)
试一试{
camMap.put(camId,Camera.open(camId));
doToast(“打开cam#”+camId+“成功”);
}捕获(例外e){
doToast(“打开cam#”+camId+“失败”);
}
}
私人最终无效释放摄影机(){
最终迭代器iter=camMap.keySet().Iterator();
while(iter.hasNext())
camMap.remove(iter.next()).release();
}
专用最终布尔检查CameraHardware(){
if(getPackageManager().hasSystemFeature(PackageManager.FEATURE\u摄像头))
返回camIds.length请共享完整的日志以进行跟踪。@Manmohan,对延迟表示抱歉,并感谢您的重播。我已在上发布了我的日志,但根据您的日志,我认为这意味着无法一次打开超过1个cam。我认为您应该避免使用循环打开摄影机代码,如果需要这样做,则应避免使用循环打开摄影机代码Manmohan,如果您没有上述问题的经验,那么为什么要请求日志呢?不迭代摄影机实例是一个愚蠢的想法,这就是为什么我们在编程中使用泛型,以便以相同的方式处理所有对象(有一个接口).无论如何,谢谢你。你可以试着向别人推荐。想一想如何一次打开/使用多个摄像头,这就是为什么我建议,我以为你已经忘记了这个事实。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.cam"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="19"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
<uses-permission android:name="android.permission.CAPTURE_SECURE_VIDEO_OUTPUT" />
<uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-feature
android:name="android.hardware.camera"
android:required="true" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.cam.Tester"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>