2012-07-11 3 views
1

저는 초보자 프로그래머이며 카메라에 문제가 있습니다. 제가하려고하는 것은 카메라에서 미리보기를 얻는 것입니다. 문제는 Camera.open()이 항상 null을 반환한다는 것입니다. 코드는 다음과 같이 진행됩니다Android 에뮬레이터의 카메라가 작동하지 않습니다.

CameraPreview.java

public class CameraPreview extends Activity implements SurfaceHolder.Callback 
{ 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_camera_preview); 

     SurfaceHolder holder; 
     SurfaceView preview = (SurfaceView) findViewById(R.id.surface1); 
     holder = preview.getHolder(); 
     holder.addCallback(this); 
     holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

     Camera camera = Camera.open(); 
     if(camera!=null) 
     { 
      try 
      { 
       camera.setPreviewDisplay(holder); 
      } 
      catch (IOException e) 
      { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      camera.startPreview(); 
     } 
    } 

    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 
     // TODO Auto-generated method stub  
    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
     // TODO Auto-generated method stub 

    } 
} 

의 AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.paparazzi" 
android:versionCode="1" 
android:versionName="1.0" > 
<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="15" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/title_activity_main" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".CameraPreview"> </activity> 
</application> 

에뮬레이터 설정 :

hw.lcd.density=240 
hw.cpu.arch=arm 
skin.name=WVGA800 
sdcard.size=64M 
abi.type=armeabi-v7a 
hw.camera.back=emulated 
image.sysdir.1=system-images\android-16\armeabi-v7a\ 
hw.gpu.enabled=yes 
hw.camera.front=emulated 
skin.path=platforms\android-16\skins\WVGA800 
hw.cpu.model=cortex-a8 
vm.heapSize=48 
hw.ramSize=512 

나는 안드로이드 P와 일식 사용 lugin과 최신 sdk. 나는 정말로 어떤 제안이라도 고맙게 생각할 것이다.

+0

테스트를 사용하여 코드의 거의 라인으로 수행 할 수 없음 에뮬레이터에서 카메라 리소스를 지원하지 않으므로 ... –

+0

자, 고마워, 그래도 작동하지 않습니다. 이번에는 간단하게 설명하겠습니다 - 카메라를 에뮬레이터에서 제대로 작동시키는 것이 가능하다고 생각합니까 아니면 실제 장치를 사용해야합니까? –

+0

카메라가 에뮬레이터에서 작동하지 않으므로 에뮬레이터에서 테스트 할 수 없습니다. Mainank에서 이미 말한대로 실제 장치에서 응용 프로그램을 테스트해야합니다. – banzai86

답변

0

매니페스트에 다음과 같은 기능을 지정하지 않았습니다. 그것을주고 다시 실행하십시오.

<uses-feature android:name="android.hardware.camera" android:required="true"/> 

여전히 예외가 발생하는 경우 Logcat 출력을 여기에 입력하십시오.

업데이트 : 당신의 코드 위에

private static Camera camera; 

    public static Camera getCameraInstance(){ 
     try { 
      camera = Camera.open(); 
     } 
     catch (Exception e){ 
      // Camera is not available (in use or does not exist) 
      Toast.makeText(context, "Camera is occupied by another program" , Toast.LENGTH_SHORT).show(); 
     } 
     return camera; // returns null if camera is unavailable 
    } 

사용하고 다시하고 다시 얻는 경우 예외를 추출하려고합니다.

전화

당신의 surfaceCreated 방법 내부
CameraPreview.getCameraInstance(); 

감사 @alextsc 이 에뮬레이터는 카메라 시뮬레이션을 지원하지 않는 API 버전 14 전에

+2

이것은 a) 필수 사항은 아닙니다. 일부 기준에 따라 앱을 필터링하는 시장 (예 : Google Play)에 대한 힌트 일뿐입니다. b) 이미 암시 적으로 포함되어 있습니다. ' '없이 카메라 권한을 요청하면이 기능이 사용됩니다. [the docs] (http://developer.android.com/guide/topics/manifest/uses-feature-element.html#implicit)를 참조하십시오. 당신은 당신의 매니 페스트/코드를 더 읽기 쉽도록하기 위해 그것을 철자 할 수 있습니다. –

0

-기능을 사용에 대해 생각 나게하는 방법 . 업데이트 이후에도 문서는 실제로 그것에 대해 이야기하지 않습니다.

해결 방법이 있습니다. 여기를 확인하십시오.

http://www.tomgibara.com/android/camera-source

0

, 안드로이드의 붙박이 카메라 응용 프로그램을 사용하여 카메라를 시작하고 사진을 촬영은 .... 의도의 힘 실제 장치에

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 

    // start the image capture Intent 
    startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE); 
관련 문제