从Android 4.4中的Gallery中选择裁剪

Android 4.4开始,当您启动Intent.ACTION_GET_CONTENT类型的Intent时,不会在Gallery,DropBox等之间进行选择,而是打开新的文档浏览器.如果您只是想打开一个图像,这很好,因为这仍然可以用与旧版APIS相同的方式执行.当您需要裁剪所选图像时会出现问题,因为文档浏览器忽略了我传递给它的Uri和crop参数.这就是我在做的事情:

void take_photo() {
    File file = null;
    try {
        file = PhotoUtils.createTemporaryFile("picture",".jpg",EditProfileActivity.this);
        file.delete();

    } catch (Exception e) {
        e.printStackTrace();
    }
    photoUri = Uri.fromFile(file);
    Intent galleryIntent= new Intent(Intent.ACTION_GET_CONTENT);
    galleryIntent.setType("image/*");
    galleryIntent.putExtra("crop","true");
    galleryIntent.putExtra("aspectX",2);
    galleryIntent.putExtra("aspectY",2);
    galleryIntent.putExtra("outputX",1300);
    galleryIntent.putExtra("outputY",1300);
    galleryIntent.putExtra(MediaStore.EXTRA_OUTPUT,photoUri);
    startActivityForResult(galleryIntent,ACTIVITY_SELECT_IMAGE);
}

然后我保存了我的photoUri,以确保我在返回时可以使用它:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    if (photoUri != null)
        outState.putString("uri",photoUri.toString());
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    if (savedInstanceState.containsKey("uri"))
        photoUri = Uri.parse(savedInstanceState.getString("uri"));
}

然后在onActivityResult中,我只需要使用photoUri打开一个InputStream,因为galleryIntent已经创建了带有croped图像的文件.

现在,当我这样做时,从未创建由意图中的photoUri指定的文件.有没有新方法这样做?

最佳答案
您可能希望使用返回的intent的数据Uri.

protected void onActivityResult(int requestCode,int resultCode,Intent intent) {

  if (requestCode == ACTIVITY_SELECT_IMAGE) {

     if(resultCode == RESULT_OK){      
         Uri realUri = intent.getData();   
     }
  }
}

现在,由于DocumentsActivity不知道如何“裁剪”任何东西.您可以将操作更改为:Intent.ACTION_PICK

这将让您绕过DocumentsActivity直接进入图库或照片应用程序.

不过,我建议你使用两个Intent.一个意图是选择一张照片,然后一个意图来裁剪该照片.这是更可靠的,因为一些应用程序,如照片应用程序,不知道如何处理“作物”额外.

相关文章

以下为个人理解,如错请评 CE: 凭据加密 (CE) 存储空间, 实际路径/data/user_ce/ DE: 设备加密 (DE) 存...
转载来源:https://blog.csdn.net/yfbdxz/article/details/114702144 用EventLog.writeEvent打的日志(或...
事件分发机制详解 一、基础知识介绍 1、经常用的事件有:MotionEvent.ACTION_DOWN,MotionEvent.ACTION...
又是好久没有写博客了,一直都比较忙,最近终于有时间沉淀和整理一下最近学到和解决的一些问题。 最近进...
Android性能优化——之控件的优化 前面讲了图像的优化,接下来分享一下控件的性能优化,这里主要是面向...
android的开源库是用来在android上显示gif图片的。我在网上查了一下,大家说这个框架写的不错,加载大的...