Android 照片库在使用 intent.ACTION_EDIT 时没有 return URI
Android Photo Gallery does not return URI when using intent.ACTION_EDIT
我想使用外部图像编辑器更新我的应用程序中的图像。我正在使用以下代码启动一个应用程序来更新图像。
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 照片应用程序时,代码 intent.getData() returns 像这样的意图 intent = {Intent@5486} Intent { typ= image/jpeg } 在调试器中。返回的意图中没有 Uri,我无法获取已更新的图像。也没有额外的。
我错过了什么?
谢谢。
The documentation for ACTION_EDIT
明确指出:
Output: nothing.
因此,"Google Photo app" 工作正常。
您已经知道图像的 Uri
,因为您首先将其放在 ACTION_EDIT
Intent
中。所以,使用那个。
我想使用外部图像编辑器更新我的应用程序中的图像。我正在使用以下代码启动一个应用程序来更新图像。
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 照片应用程序时,代码 intent.getData() returns 像这样的意图 intent = {Intent@5486} Intent { typ= image/jpeg } 在调试器中。返回的意图中没有 Uri,我无法获取已更新的图像。也没有额外的。
我错过了什么? 谢谢。
The documentation for ACTION_EDIT
明确指出:
Output: nothing.
因此,"Google Photo app" 工作正常。
您已经知道图像的 Uri
,因为您首先将其放在 ACTION_EDIT
Intent
中。所以,使用那个。