应用程序在三星手机拍照后崩溃

时间:2016-06-21 16:34:20

标签: java android camera samsung-mobile

我正在开发一款Android应用,用户可以在其中选择图库中的图片,也可以通过手机的相机点击照片并保存在应用的名为 FiZZ的文件夹中。应用程序的相机部分在除三星以外的所有Android手机上都运行得非常好。下面给出的代码在NullPointerException处引发image.setPath(fileUri.getPath());并崩溃。

MainActivity.java:

以下是我拍照并将其保存在 / DCIM / FiZZ 文件夹中的方式:

/**
 * take a photo
 */
private void activeTakePhoto() {
    final Dialog dialog = new Dialog(MainActivity.this);
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {

        int MEDIA_TYPE_IMAGE = 1;
        fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image
        takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name

        // start the image capture Intent
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);

        try {
            FileOutputStream outputStream_image = openFileOutput(file_image, MODE_WORLD_READABLE);
            outputStream_image.write(string.getBytes());
            outputStream_image.close();
            Toast.makeText(getBaseContext(), "location of image saved", Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


private Uri getOutputMediaFileUri(int MEDIA_TYPE_IMAGE) {
    // TODO Auto-generated method stub

    if(isExternalStorageWritable()) {
        //Toast.makeText(getBaseContext(), "value: "+ Uri.fromFile(getOutputMediaFile(MEDIA_TYPE_IMAGE)), Toast.LENGTH_LONG).show();
        return Uri.fromFile(getOutputMediaFile(MEDIA_TYPE_IMAGE));
    }
    else

        return null;
}
/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

private File getOutputMediaFile(int type) {
    // To be safe, you should check that the SDCard is mounted
    // using Environment.getExternalStorageState() before doing this.

    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "FiZZ");
    // This location works best if you want the created images to be shared
    // between applications and persist after your app has been uninstalled.
    // Create the storage directory if it does not exist
    if (!mediaStorageDir.exists()) {
        if (!mediaStorageDir.mkdirs()) {
            Log.d("FiZZ", "failed to create directory");
            Toast.makeText(getBaseContext(),"File directory creation failed",Toast.LENGTH_LONG).show();
            return null;
        }
    }
    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());

    int MEDIA_TYPE_IMAGE = 1;
    if (type == MEDIA_TYPE_IMAGE){
        //String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String fname= "IMG_"+ timeStamp + ".jpg";
        mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_"+ timeStamp + ".jpg");
    } else {
        return null;
    }
    return mediaFile;
}

调用 request_image_capture 案例:

case REQUEST_IMAGE_CAPTURE:
    if (requestCode == REQUEST_IMAGE_CAPTURE &&
            resultCode == RESULT_OK) {
        String filePath = imageFile.getAbsolutePath();
        String imageName = String.valueOf(mediaFile);

        Cursor cursor =
                getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                        new String[]{MediaStore.Images.Media._ID},
                        MediaStore.Images.Media.DATA + "=? ",
                        new String[]{filePath}, null);


        if (cursor != null && cursor.moveToFirst()) {
            int column_index_data = cursor.getColumnIndexOrThrow(
                    MediaStore.MediaColumns._ID);
            String picturePath = cursor.getString(column_index_data);
            MyImage image = new MyImage();
            image.setTitle(imageName);
            image.setDescription(" ");
            image.setDatetime(System.currentTimeMillis());
            image.setPath(picturePath);
            image.setName(null);
            image.setPriority("OFF");
            images.add(image);
            daOdb.addImage(image);
            adapter.notifyDataSetChanged();
            cursor.close();
        } else {
            MyImage image = new MyImage();
            image.setTitle(imageName);
            image.setDescription(" ");
            image.setDatetime(System.currentTimeMillis());
            image.setPath(fileUri.getPath());//NullPointerException
            image.setName(null);
            image.setPriority("OFF");
            images.add(image);
            daOdb.addImage(image);
            adapter.notifyDataSetChanged();
            //swipelist.invalidateViews();
        }
    }

0 个答案:

没有答案