小米手机调用com.android.camera.action.CROP时剪裁图片不成功的原因

SouthMa 2014-11-13 10:48:53
最近向做一个头像剪裁的功能,调用系统的gallery选择图片,用com.android.camera.action.CROP对URI剪裁便可以实现。
用联想的一部手机测试如下代码没问题

public void ChooseImage(View v) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);// ACTION_OPEN_DOCUMENT
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
startActivityForResult(intent, SELECT_PIC_KITKAT);
} else {
startActivityForResult(intent, SELECT_PIC);
}
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (RESULT_OK == resultCode) {
switch (requestCode) {
case SELECT_PIC_KITKAT:
Uri selectedImage = data.getData();
startPhotoZoom(selectedImage);
break;
case 3:
if(data != null){
setPicToView(data);
}
break;
default:
break;
}
}
}

public void startPhotoZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 150);
intent.putExtra("outputY", 150);
intent.putExtra("return-data", true);
startActivityForResult(intent, 3);
}


但是小米系统下提示加载图片失败,去看了下log提示如下:
W/Worker (18831): Exception in running a job
W/Worker (18831): java.lang.SecurityException: Permission Denial: opening provider com.android.providers.media.MediaDocumentsProvider from ProcessRecord{43ca3940 18831:com.miui.gallery:crop/u0a6} (pid=18831, uid=10006) requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS
W/Worker (18831): at android.os.Parcel.readException(Parcel.java:1465)
W/Worker (18831): at android.os.Parcel.readException(Parcel.java:1419)
W/Worker (18831): at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:2860)
W/Worker (18831): at android.app.ActivityThread.acquireProvider(ActivityThread.java:4448)
W/Worker (18831): at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2239)
W/Worker (18831): at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1430)
W/Worker (18831): at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1052)
W/Worker (18831): at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:909)
W/Worker (18831): at android.content.ContentResolver.openFileDescriptor(ContentResolver.java:766)
W/Worker (18831): at android.content.ContentResolver.openFileDescriptor(ContentResolver.java:721)
W/Worker (18831): at com.miui.gallery.data.UriImage.openOrDownloadInner(UriImage.java:141)
W/Worker (18831): at com.miui.gallery.data.UriImage.openFileOrDownloadTempFile(UriImage.java:116)
W/Worker (18831): at com.miui.gallery.data.UriImage.prepareInputFile(UriImage.java:210)
W/Worker (18831): at com.miui.gallery.data.UriImage.access$100(UriImage.java:48)
W/Worker (18831): at com.miui.gallery.data.UriImage$BitmapJob.run(UriImage.java:233)
W/Worker (18831): at com.miui.gallery.data.UriImage$BitmapJob.run(UriImage.java:225)
W/Worker (18831): at com.miui.gallery.app.CropImageBase$LoadBitmapDataTask.run(CropImageBase.java:1003)
W/Worker (18831): at com.miui.gallery.app.CropImageBase$LoadBitmapDataTask.run(CropImageBase.java:975)
W/Worker (18831): at com.miui.gallery.util.ThreadPool$Worker.run(ThreadPool.java:130)
W/Worker (18831): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/Worker (18831): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/Worker (18831): at java.lang.Thread.run(Thread.java:841)
W/Worker (18831): at com.miui.gallery.util.PriorityThreadFactory$1.run(PriorityThreadFactory.java:43)

猜测调用com.android.camera.action.CROP实际为com.miui.gallery:crop缺少权限。
...全文
13940 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wmsunku 2017-01-23
  • 打赏
  • 举报
回复
http://blog.csdn.net/eclothy/article/details/42719217 这个方法 那还不如不掉用裁剪 应为它获取的是裁剪之前的图
qq_36611659 2016-11-16
  • 打赏
  • 举报
回复
楼主能说下怎么解决的吗?具体步骤!谢谢!
qq_33738076 2016-08-02
  • 打赏
  • 举报
回复
楼主 剪裁是点击应用 meifany
u014418729 2016-04-14
  • 打赏
  • 举报
回复
使用那个博客之后,返回的data为null???
濯君 2016-03-19
  • 打赏
  • 举报
回复
非常感谢,解决问题了
阿不阿 2015-10-09
  • 打赏
  • 举报
回复
阿不阿 2015-01-12
  • 打赏
  • 举报
回复
遇到相同问题,miui裁剪图片后直接回到主界面,无法响应onActivityResult()。
cxy635512440 2014-12-08
  • 打赏
  • 举报
回复
同样的程序,在使用小米系统的手机上调用时,无法显示相应效果
SouthMa 2014-11-13
  • 打赏
  • 举报
回复
已经解决了,4.4后gallery的最近和图片返回的content前缀的uri,需要将其转换为file:///前缀的绝对地址,然后再去调用com.android.camera.action.CROP,将该uri给setData,就不会有权限问题了。

80,468

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧