Исключение времени выполнения Java: не удалось выполнить takePicture

Когда я нажимаю Button на HomeActivity, чтобы вызвать камеру, мое приложение вылетает.

Исключение среды выполнения Java: не удалось сделать снимок

04-17 17:59:18.229: E/AndroidRuntime(23037): FATAL EXCEPTION: main
04-17 17:59:18.229: E/AndroidRuntime(23037): java.lang.RuntimeException: takePicture failed
04-17 17:59:18.229: E/AndroidRuntime(23037):    at android.hardware.Camera.native_takePicture(Native Method)
04-17 17:59:18.229: E/AndroidRuntime(23037):    at android.hardware.Camera.takePicture(Camera.java:1202)
04-17 17:59:18.229: E/AndroidRuntime(23037):    at android.hardware.Camera.takePicture(Camera.java:1147)
04-17 17:59:18.229: E/AndroidRuntime(23037):    at com.cs9033.katalogkiller.HomeActivity.scanMail(HomeActivity.java:108)
04-17 17:59:18.229: E/AndroidRuntime(23037):    at com.cs9033.katalogkiller.HomeActivity$1.onClick(HomeActivity.java:67)
04-17 17:59:18.229: E/AndroidRuntime(23037):    at android.view.View.performClick(View.java:4354)
04-17 17:59:18.229: E/AndroidRuntime(23037):    at android.view.View$PerformClick.run(View.java:17948)
04-17 17:59:18.229: E/AndroidRuntime(23037):    at android.os.Handler.handleCallback(Handler.java:725)
04-17 17:59:18.229: E/AndroidRuntime(23037):    at android.os.Handler.dispatchMessage(Handler.java:92)
04-17 17:59:18.229: E/AndroidRuntime(23037):    at android.os.Looper.loop(Looper.java:137)
04-17 17:59:18.229: E/AndroidRuntime(23037):    at android.app.ActivityThread.main(ActivityThread.java:5293)
04-17 17:59:18.229: E/AndroidRuntime(23037):    at java.lang.reflect.Method.invokeNative(Native Method)
04-17 17:59:18.229: E/AndroidRuntime(23037):    at java.lang.reflect.Method.invoke(Method.java:511)
04-17 17:59:18.229: E/AndroidRuntime(23037):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
04-17 17:59:18.229: E/AndroidRuntime(23037):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
04-17 17:59:18.229: E/AndroidRuntime(23037):    at dalvik.system.NativeStart.main(Native Method)

HomeActivity.java

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.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class HomeActivity extends Activity {

    private static String TAG = "HomeActivity";

    private Camera camera;
      private int cameraId = 0;

    private Button cameraButton;
    private Button catalogButton;
    private Button faqButton;
    private Button leadeBoardButton;

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

        bindComponents();
        addListeners();

        // 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);
          }
        }
    }



    private void bindComponents() {

        cameraButton = (Button) findViewById(R.id.camera_button);
        catalogButton = (Button) findViewById(R.id.catalog_button);
        faqButton = (Button) findViewById(R.id.faq_button);
        leadeBoardButton = (Button) findViewById(R.id.leaderboard_button);

    }

    private void addListeners() {

        cameraButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                scanMail();

            }
        });

        catalogButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

            }
        });

        faqButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

            }
        });

        leadeBoardButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

            }
        });

    }

    public void scanMail() {
         if (camera != null) {
                Log.d("camera state","camera is NOT null");  
              }else{
                Log.d("camera state","camera is null");
                camera = android.hardware.Camera.open(cameraId);
              }
              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(TAG, "Camera found");
            cameraId = i;
            break;
          }
        }
        return cameraId;
    }

    protected void onPause() {
        if (camera != null) {
          camera.release();
          camera = null;
        }
        super.onPause();
      }
}

PhotoHandler.java

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

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 static final String TAG="tag";

  private final Context context;

  public PhotoHandler(Context context) {
    this.context = context;
  }

  @Override
  public void onPictureTaken(byte[] data, Camera camera) {

    File pictureFileDir = getDir();

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

      Log.d(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(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");
  }
}

Примечание. Я выполняю отладку на телефоне Samsung S4
И имею все необходимые разрешения.


person Shaz    schedule 17.04.2014    source источник
comment
Опубликовать трассировку стека исключений.   -  person Shreyos Adikari    schedule 18.04.2014
comment
Выложи свой лог. Чтение этого было бы первым шагом, чтобы найти, в чем и где проблема.   -  person LoveMeSomeFood    schedule 18.04.2014
comment
@ShreyosAdikari Я опубликовал свой журнал ошибок.   -  person Shaz    schedule 18.04.2014
comment
@Rani Я добавил журнал ошибок   -  person Shaz    schedule 18.04.2014
comment
Есть ли что-нибудь интересное в выводе logcat непосредственно перед исключением? например любые жалобы от медиасервера.   -  person fadden    schedule 18.04.2014
comment
@fadden ничего ошибочного   -  person Shaz    schedule 18.04.2014
comment
посмотрите, поможет ли это..   -  person Aalap Patel    schedule 05.10.2017