Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么mediastore要从画廊拍摄最后一张照片_Android_Android Fragments_Android Camera_Mediastore - Fatal编程技术网

Android 为什么mediastore要从画廊拍摄最后一张照片

Android 为什么mediastore要从画廊拍摄最后一张照片,android,android-fragments,android-camera,mediastore,Android,Android Fragments,Android Camera,Mediastore,你好!! 当我在片段中使用相机时,我的android应用程序中的图片库和mediastore之间存在问题。 我在安卓网站上查看了如何拍摄片段,在一些论坛上了解了如何拍摄最后一张照片,但媒体商店总是给我最后一张照片,好像它找不到最后一张照片一样 这是我的代码: private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

你好!! 当我在片段中使用相机时,我的android应用程序中的图片库和mediastore之间存在问题。 我在安卓网站上查看了如何拍摄片段,在一些论坛上了解了如何拍摄最后一张照片,但媒体商店总是给我最后一张照片,好像它找不到最后一张照片一样

这是我的代码:

private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    File photoFile = null;
    try {
        photoFile = createImageFile();
    } catch (IOException ex) {
        Log.i(LOG_TAG,"ERRRRROR: "+ex.toString());
    }
    if (photoFile != null) {
        mCurrentPhotoPath = "file:" +photoFile.getAbsolutePath();
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(photoFile));
        startActivityForResult(takePictureIntent, REQ_CAMERA_PICTURE);

    }
}

private void galleryAddPic() {
    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    File f = new File(mCurrentPhotoPath);
    Uri contentUri = Uri.fromFile(f);
    mCurrentPhotoUri = contentUri;
    mediaScanIntent.setData(contentUri);
    getActivity().sendBroadcast(mediaScanIntent);
    Log.d(LOG_TAG,"Photo SAVED");
}


private File createImageFile() throws IOException {
    // Create an image file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = "JPEG_" + timeStamp + "_";
    File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir      /* directory */
    );

    mCurrentPhotoAbsolutePath = image.getAbsolutePath();

    Log.i(LOG_TAG,"image path : "+image.getAbsolutePath());

    return image;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == REQ_CAMERA_PICTURE)
    {
        if (resultCode == Activity.RESULT_OK)
        {
            galleryAddPic();
            String filePath = getActivity().getPreferences(Context.MODE_PRIVATE).getString(TMP_PHOTO_FILE_LATEST_KEY, null);
            handleCameraPicture(mCurrentPhotoUri.toString());
        }
        else
        {
            clearCurrentActionData();
        }
    }
}
  private String getLastImagePath() {
    String[] projection = new String[]{
            MediaStore.Images.ImageColumns._ID,
            MediaStore.Images.ImageColumns.DATA,
            MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME,
            MediaStore.Images.ImageColumns.DATE_TAKEN,
            MediaStore.Images.ImageColumns.MIME_TYPE
    };
    final Cursor cursor = getActivity().getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null,null, MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC");


    if (cursor.moveToFirst()) {
        String imageLocation = cursor.getString(1);
        File imageFile = new File(imageLocation);
        Bitmap bm = BitmapFactory.decodeFile(imageLocation);
        return imageFile.getPath().toString();
    }
    else{
        return "";
    }

}
当我尝试获取最后一个图像路径时,问题出现在这里

private void handleCameraPicture(String pictureFileUri)
{
    _currentDataObjectBuilder.addParameter(DataObject.Parameter.IMAGE, String.valueOf(getFileCount()));

    //create a copy of the file into the internal storage
    final File pictureFile = new File(pictureFileUri);

    Log.d(LOG_TAG,"picture file uri : "+pictureFileUri.toString());

    FileOutputStream fos =null;
    byte[] pictureData = new byte[0];
    try
    {

        pictureData = compressImage(getLastImagePath());
        fos = getActivity().openFileOutput(String.valueOf(getFileCount()), Context.MODE_PRIVATE);
        fos.write(pictureData);
        Log.i(LOG_TAG,"SETTING FILE OUTPUT STREAM");
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
    finally {
        try {
            fos.close();
            pictureFile.delete();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    if (_currentAction.equals(Action.PICTURE_CAPTION) || _currentAction.equals(Action.ARCHIVE))
    {
        showMessageView();
    }
    else
    {
        sendCurrentActionData();
    }
}
handleCameraPicture功能允许我将最后一张图片发送到外部网站

我不知道我做错了什么,所以请帮帮我!我会失去理智的,否则

谢谢大家!

托马斯! 我终于找到了解决方案,实际上我创建图片时的uri与我试图将图片保存在图库中时的uri不同,因此我的光标引发了空指针异常

我将GalleryAddPic函数更新为

private void galleryAddPic(Uri uri) {
    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    mCurrentPhotoUri = uri;
    mediaScanIntent.setData(uri);
    getActivity().sendBroadcast(mediaScanIntent);
    Log.d(LOG_TAG,"Photo SAVED");
}
现在一切都很好