使用intent.ACTION_EDIT时,Android照片库不会返回URI

时间:2015-12-05 00:15:16

标签: android android-intent uri photo-gallery image-editor

我想使用外部图像编辑器在我的应用中更新图像。我使用以下代码启动应用以更新图片。

private void dispatchAdjustImage(){

    try {
        Integer mImageId = ImageHelper.getImageIdFromRealPath(getString(R.string.imageFilePath) + getString(R.string.imageFileName), getContentResolver());
        Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI.buildUpon().appendPath(mImageId.toString()).build();

        Intent adjustPictureIntent = new Intent();
        adjustPictureIntent.setDataAndType(uri, "image/*");
        adjustPictureIntent.setAction(Intent.ACTION_EDIT);
        adjustPictureIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        adjustPictureIntent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        startActivityForResult(adjustPictureIntent, REQUEST_IMAGE_ADJUST);
    }catch (ActivityNotFoundException anfe) {
        Global.showDialog(NfScannerActivity.this, getString(R.string.msgErrorAdjustImageAppMissing),
                getString(R.string.msgDownloadPhotoEditor), getString(R.string.textYes),
                getString(R.string.textNo), getString(R.string.motorolaGalleryGooglePlayLink)).show();
    }catch (Exception ex) {
        Toast.makeText(mContext, R.string.msgErrorAdjustImage, Toast.LENGTH_LONG).show();
    }
}

这是onActivityResult

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);

    switch (requestCode)
    {
        case REQUEST_IMAGE_ADJUST:
            getAdjustImageResults(resultCode, intent);
            unprotectViewFields();
            break;
    }

}

private void getAdjustImageResults(int resultCode, Intent intent) {

    if (resultCode == Activity.RESULT_OK)
    {
        clearViewFields();
        try {
            Uri adjustedImageUri = intent.getData();
            String mFullFileName = ImageHelper.getRealPathFromURI(adjustedImageUri, this);
            mImageBitmap = ImageHelper.readImageFromDisk(mFullFileName);
            ImageHelper.deleteImageFromDisk(mFullFileName);
            saveAndLoadImage();

        } catch (Exception e) {
            showErrorDialog(getString(R.string.msgErrorAdjustImage));
        }
    }
}

当我使用摩托罗拉图库应用程序更新图片时,每件事情都很严谨。 Motorla Gallery应用程序启动,我更新图片,保存它,当控件返回onActivityResult时,可以获取并处理更新的图像。返回的意图就像这样 intent = {Intent @ 5486} Intent {dat = content:// media / external / images / media / 22544}

当我使用Google Photo应用时,代码intent.getData()会在调试器中返回类似 intent = {Intent @ 5486} Intent {typ = image / jpeg} 的意图。返回的意图中没有Uri,我无法获得更新的图像。也没有额外的东西。

我错过了什么? 谢谢。

1 个答案:

答案 0 :(得分:1)

The documentation for ACTION_EDIT明确指出:

  

输出:没有。

因此," Google Photo应用"工作正常。

您已经知道图片的Uri,因为您首先将其放在ACTION_EDIT Intent中。所以,使用它。