2014-01-27 3 views
0

다음 코드는 아이스크림 샌드위치에서 완벽하게 실행되지만 Jelly Bean 및 Kitkat에서 강제 종료됩니다. 도와주세요.Android 카메라 API 앱이 Jelly Bean에서 버튼 클릭으로 닫힘

MainActivity.java

package com.example.final_cam; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.app.Activity; 
import android.content.pm.PackageManager; 
import android.hardware.Camera; 
import android.hardware.Camera.CameraInfo; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Toast; 

public class MainActivity extends Activity { 
final static String DEBUG_TAG = "MainActivity"; 
    private Camera camera; 
    private int cameraId = 0; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // do we have a camera? 
    if (!getPackageManager() 
     .hasSystemFeature(PackageManager.FEATURE_CAMERA)) { 
     Toast.makeText(this, "No camera on this device", Toast.LENGTH_LONG) 
      .show(); 
    } else { 
     cameraId = findFrontFacingCamera(); 
     if (cameraId < 0) { 
     Toast.makeText(this, "No front facing camera found.", 
      Toast.LENGTH_LONG).show(); 
     } else { 
     camera = Camera.open(cameraId); 
     } 
    } 
} 

public void onClick(View view) { 
     camera.takePicture(null, null, 
      new PhotoHandler(getApplicationContext())); 
     } 
    private int findFrontFacingCamera() { 
     int cameraId = -1; 
     // Search for the front facing camera 
     int numberOfCameras = Camera.getNumberOfCameras(); 
     for (int i = 0; i < numberOfCameras; i++) { 
      CameraInfo info = new CameraInfo(); 
      Camera.getCameraInfo(i, info); 
      if (info.facing == CameraInfo.CAMERA_FACING_FRONT) { 
      Log.d(DEBUG_TAG, "Camera found"); 
      cameraId = i; 
      break; 
      } 
     } 
     return cameraId; 
     } 
    @Override 
    protected void onPause() { 
    if (camera != null) { 
     camera.release(); 
     camera = null; 
    } 
    super.onPause(); 
    } 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

} 

PhotoHandler.java

나는 그것은 내 갤럭시 탭 (아이스크림 샌드위치에서 성공적으로 실행 여기 링크에 주어진 코드 ... http://www.vogella.com/tutorials/AndroidCamera/article.html 을 사용
package com.example.final_cam; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

import android.annotation.SuppressLint; 
import android.content.Context; 
import android.hardware.Camera; 
import android.hardware.Camera.PictureCallback; 
import android.os.Environment; 
import android.util.Log; 
import android.widget.Toast; 

public class PhotoHandler implements PictureCallback { 
private final Context context; 
public PhotoHandler(Context context) { 
     this.context = context; 
     } 
@SuppressLint("SimpleDateFormat") 
@Override 
public void onPictureTaken(byte[] data, Camera camera) { 
    // TODO Auto-generated method stub 
    File pictureFileDir = getDir(); 

    if (!pictureFileDir.exists() && !pictureFileDir.mkdirs()) { 

     Log.d(MainActivity.DEBUG_TAG, "Can't create directory to save image."); 
     Toast.makeText(context, "Can't create directory to save image.", 
      Toast.LENGTH_LONG).show(); 
     return;  
} 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyymmddhhmmss"); 
    String date = dateFormat.format(new Date()); 
    String photoFile = "Picture_" + date + ".jpg"; 

    String filename = pictureFileDir.getPath() + File.separator + photoFile; 

    File pictureFile = new File(filename); 

try { 
     FileOutputStream fos = new FileOutputStream(pictureFile); 
     fos.write(data); 
     fos.close(); 
     Toast.makeText(context, "New Image saved:" + photoFile, 
      Toast.LENGTH_LONG).show(); 
    } catch (Exception error) { 
     Log.d(MainActivity.DEBUG_TAG, "File" + filename + "not saved: " 
      + error.getMessage()); 
     Toast.makeText(context, "Image could not be saved.", 
      Toast.LENGTH_LONG).show(); 
    } 

} 

private File getDir() { 
     File sdDir = Environment 
      .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 
     return new File(sdDir, "CameraAPIDemo"); 
     } 
    } 

)하지만 Jelly Bean과 Kitkat의 경우 사진 만들기 버튼을 클릭하면 강제 종료됩니다. 제발 어디서 잘못했는지 안내해 줘요. ​​그리고 모든 변화는 ..

답변

1

로그에 표시되는 실제 오류를 게시해야합니다 (예외/스택 추적).

그러나 카메라 미리보기를 시작하지 않은 것처럼 보입니다. 일부 제조업체 장치에서는 작동하지만 사진을 찍기 전에 카메라 미리보기를 시작해야합니다. 즉, 미리보기 (SurfaceView 또는 SurfaceTexture)에 대한 대상이 필요하며 Surface가 유효 해지면 미리보기를 시작해야합니다. Building a camera app

:

하는 것은 자세한 내용은 안드로이드 개발자 웹 사이트에서 샘플 카메라 앱에서 봐 주시기 바랍니다
관련 문제