首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cropper返回空Uri。

Cropper返回空Uri。
EN

Stack Overflow用户
提问于 2015-03-06 09:38:27
回答 1查看 998关注 0票数 0

我的应用程序有可能改变用户化身(后者将其上传到web服务)。但是在某些设备上,Cropper ("com.android.camera.action.CROP“意图)启动,但返回空Uri。你能指出我做错了什么吗?

第一用户选择以下照片:

代码语言:javascript
复制
public static void pickPhoto(final Context context) {
    Intent pickImageIntent = new Intent(Intent.ACTION_GET_CONTENT);
    pickImageIntent.setType("image/*");
    ((ActionBarActivity) context).startActivityForResult(Intent.createChooser(pickImageIntent, "Select Avatar"), SettingsActivity.REQUEST_CODE_PICK_AVATAR);
}

然后,在activity的RESULT_OK (选定的图像uri)之后,它将启动cropper:

代码语言:javascript
复制
public static void startCropper(final Context context, final Uri imageToCrop) {
    final Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setData(imageToCrop);
    intent.putExtra("outputX", 200);
    intent.putExtra("outputY", 200);
    intent.putExtra("aspectX", 1);
    intent.putExtra("aspectY", 1);
    intent.putExtra("scale", true);
    intent.putExtra("noFaceDetection", true);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(context)));
    intent.putExtra("return-data", true);
    ((ActionBarActivity) context).startActivityForResult(intent, SettingsActivity.REQUEST_CODE_CROP_AVATAR);
}

它返回带有空RESULT_OK ()的getData:

代码语言:javascript
复制
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE_CROP_AVATAR && resultCode == RESULT_OK) {
        Uri uri = data.getData(); // uri is null on some devices
    }
}

我的getTempFile方法:

代码语言:javascript
复制
public static File getTempFile(Context context) {
    File cacheDir;
    if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        cacheDir = context.getCacheDir();
    } else {
        cacheDir = context.getExternalCacheDir();
    }
    File file = new File(cacheDir, "temp_avatar.jpg");
    try {
        file.createNewFile();
    } catch (IOException e) {
    }
    return file;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-07 03:58:38

正如greenapps在问题评论中提到的,如果uri为null,然后是getExtra(“数据”),则只需在getExtra中进行额外检查,如下所示:

代码语言:javascript
复制
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE_CROP_AVATAR && resultCode == RESULT_OK) {
        Uri uri = data.getData();
        if (null != uri) {
            // do something with uri
        } else {
            Bitmap bitmap = data.getExtra("data");
            // get uri from bitmap and do something with uri
        }
    }
}

在我的应用程序中测试了代码,运行良好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28895965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档