当前位置: 首页 > 知识库问答 >
问题:

Android:从Android gallery应用程序中选择后从mediaStore获取路径

邹阳
2023-03-14

我试图返回存储在android手机中的真实照片路径。它对我的4.4有效。2手机,但使用5.0时。2电话,返回的路径为空

这是我的代码,从意图中获取真实的照片路径。以Uri形式获取数据(content://com.android.providers.media.documents/document/image:3061),

String[] proj = { MediaStore.Images.Media.DATA };
    CursorLoader loader = new CursorLoader(GlobalApplication.getContext(), photoUri, proj, null, null, null);
    Cursor cursor = loader.loadInBackground();
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    String result = cursor.getString(column_index);
    cursor.close();
    return result;

这是我启动库应用程序的代码:

Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"),MobileConstant.newInstance().REQUEST_CODE_GALLERY);

共有3个答案

楚灿
2023-03-14

从图库中拾取图像的意图

Intent intent = new Intent(Intent.ACTION_PICK,
    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");
startActivityForResult(intent, reqCode);  

In-onActivityResult方法

 @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            // TODO Auto-generated method stub
            super.onActivityResult(requestCode, resultCode, data);

            try {
                if (resultCode == Activity.RESULT_OK) {
                    if (requestCode == reqCode) {
                        if (data != null) {
                          String realPath=getRealPathFromURI(data.getData());
                        }
                    }
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }


private String getRealPathFromURI(Uri contentUri) {
        Cursor cursor = null;
        try {
            String[] proj = { MediaStore.Images.Media.DATA };
            cursor = getActivity().getContentResolver().query(contentUri, proj,
                    null, null, null);
            int column_index = cursor
                    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        } finally {
            if (cursor != null) {
                cursor.close();
            }
        }
    }
养鸿运
2023-03-14
//To get picture from gallery or camrea  
if (Build.VERSION.SDK_INT < 19) {
                Intent intent = new Intent();
                intent.setType("image/jpeg");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(intent, "Complete action using"), 200);
            } else {
                Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                intent.setType("image/jpeg");
                startActivityForResult(intent, 300);
            }

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
//To get result
if (requestCode == 200) {
        Uri selectedImage = data.getData();
        Log.d("Uri", selectedImage.toString());
        startCropImage(selectedImage);
    }
    else if (requestCode == 300) {
        Uri originalUri = data.getData();
        final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        //noinspection ResourceType
        getContentResolver().takePersistableUriPermission(originalUri, takeFlags);
        Log.d("Uri", originalUri.toString());
        startCropImage(originalUri);
    }
}
宰父淳
2023-03-14

我使用以下方法使其工作:

Cursor cursor = GlobalApplication.getContext().getContentResolver().query(photoUri, null, null, null, null);
    cursor.moveToFirst();
    String document_id = cursor.getString(0);
    document_id = document_id.substring(document_id.lastIndexOf(":")+ 1);
    cursor.close();

    cursor = GlobalApplication.getContext().getContentResolver().query(
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
    cursor.moveToFirst();
    String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
    cursor.close();

    return path;
 类似资料:
  • 我已经从谷歌阅读了这个标准描述:https://developer.android.com/training/sharing/receive 在此之后,我更新了我的AndroidManifest.xml,以包括一个意图过滤器来接受来自其他应用程序的共享(对于各种哑剧类型)。 我可以将我的应用程序视为其他应用程序中的共享选项,当我在其他应用程序中选择一个文件(例如,照片应用程序中的图像文件)并选择与

  • 我已经在谷歌云功能中构建了API。当我试图直接获取API时,会出现CORS错误。虽然我添加了,但失败了。 来自“http://localhost:3000”的“https://xxxxxxxx.com”已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上没有“access-control-allog-origin”标头。如果一个不透明的响应满足您的需要,请将请求的模式设置为“n

  • 问题内容: 如何在ng-grid中创建(或访问)选定行的数组? 文档(滚动到“网格选项”) index.html main.js Plnkr代码(并运行它) 问题答案: 根据文档,应该是的属性,因此请尝试以下操作: 控制者 的HTML

  • 我想从Primefaces中的p:selectOneMenu组件(下拉列表)中选择一个值。我从Java Bean获取数据。我有以下代码: XHTML: Java Bean DevTestController。java: InfoRowBean。java: 转换器InfoRowBeanConverter.java: 如果我按下按钮,什么都不会发生(也没有错误)。如果我从标记中删除参数“value”(

  • 我有一个超文本标记语言选择框,在我的jsp中启用了多选择。我从其他按钮动态填充选项。因此,用户不会从该选择框中选择任何值。我必须将selectbox的所有值传递给其他jsp。 我正在使用表单操作提交浏览jsp。这样做时,我无法获得所有的选择框值。 此选项仅提供该多选框中的选定值。我想要的是从selectbox中获取所有值,无论是否选中。 谢谢