【问题标题】:Reading images from the memory of the phone (no SD)从手机内存中读取图像(无 SD)
【发布时间】:2012-05-07 02:00:47
【问题描述】:

我目前正在努力解决一个希望你帮我解决的问题......基本上我正在尝试以这种方式从手机的内部图库中获取一些图像

意图意图 = new Intent();

intent.setType("image/*");

intent.setAction(Intent.ACTION_GET_CONTENT);

startActivityForResult(Intent.createChooser(intent, "选择图片"),SELECT_IMAGE);

但是当我使用这个在 onActivityResult 方法中获取 Uri 时

Uri images_uri = data.getData();

数据为空(从SD卡取图片时不会发生这种情况)

我该如何解决?

此外,作为次要问题,我怎样才能获得超过 1 个图像?我阅读了有关使用 ACTION_SEND_MULTIPLE 的信息,但这打开了发送方法的选择,而不是从哪里获取图像的地方......

提前谢谢你

【问题讨论】:

    标签: android image gallery sd-card


    【解决方案1】:

    试试这个

        public static final int GALLERY_CODE = 322;
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"),
                GALLERY_CODE);
    
    
             @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) { //Assinging on corresponding import
        super.onActivityResult(requestCode, resultCode, data);
    
            if (requestCode == GALLERY_CODE && resultCode == RESULT_OK) {
            Uri selectedImageUri = data.getData();
            selectedImagePath = getPath(selectedImageUri);
            try {
                //add logic for coping file
            } catch (Exception e) {
                e.printStackTrace();
            }
           }
    
        }
    
        public String getPath(Uri uri) {
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        int column_index = cursor
                .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }
    

    【讨论】:

    • 不,我已经设法以这种方式面对问题......事实是,一旦你到达“Uri selectedImageUri = data.getData();”行你得到的 URI 是空的,因为你得到的数据是空的......
    • 如果你得到默认的画廊视图来选择图片?\
    • 是的,我从哪里获得默认画廊来选择图片,但是当 SD 卡不在位时,即使画廊显示(显然图片少得多,但仍然有一些),我选择了图片它没有给我任何回报
    • mmhh.. 几乎不这么认为...我已经经历了两次但没有结果...我不知道清单中是否有某些东西阻止我这样做。 ..但还是谢谢你
    【解决方案2】:

    嗯,在我的情况下,它实际上是一个错误的缓存列表(画廊显示的照片实际上并不存在,所以如果我选择它们,实际的 URI 原来是 nil)。

    在调用 ACTION_GET_CONTENT 意图之前,我建议添加以下命令:

     sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
    

    这将告诉画廊它应该刷新其数据。如果您这样做,请注意在您的线程中放置一个短暂的睡眠(例如:

      Thread.sleep(1000);
    

    )。这应该允许刷新操作在实际打开之前完成。至少在我的手机上,这阻止了 Gallery 应用程序的短暂闪烁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多