如何正确获取android图像大小

如何正确获取android图像大小,android,Android,我有一个应用程序,需要用户选择一个图像,然后从图像中提取一些信息 Intent getIntent = new Intent(Intent.ACTION_GET_CONTENT); getIntent.setType("image/*"); Intent pickIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore

我有一个应用程序,需要用户选择一个图像,然后从图像中提取一些信息

Intent getIntent = new Intent(Intent.ACTION_GET_CONTENT);
                    getIntent.setType("image/*");

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

                    Intent chooserIntent = Intent.createChooser(getIntent, "Select Image");
                    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[]{pickIntent});


                     startActivityForResult(chooserIntent, CODE_REQUEST_SCREENSHOT);
这是为图像启动文件选择器,然后为结果启动文件选择器

 @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CODE_REQUEST_SCREENSHOT && resultCode == Activity.RESULT_OK && data != null) {

    final Cursor returnCursor = getContentResolver().query(data.getData(), null, null, null, null);
                returnCursor.moveToFirst();
                final int size = (int) returnCursor.getLong(returnCursor.getColumnIndex(OpenableColumns.SIZE)) > 1 ? (int) returnCursor.getLong(returnCursor.getColumnIndex(OpenableColumns.SIZE)) : (int) new File(data.getData().getPath()).length();
      if (size < 1)
                    FirebaseCrashlytics.getInstance().recordException(new RuntimeException("screenshot size == " + size + " " + data.getData().toString()));
    
    
    }
该应用程序目前正在生产中,对于一些图像用户,其大小==0。我们讨论的是图像文件。我怀疑任何用户的手机中都没有大于整数的文件

我无法在dev中重现错误[我的意思是,对于我可以测试的设备,所有文件都返回有效大小]

我检测到的错误发生在android 10和摩托罗拉手机上[但由于样本量小,这可能只是巧合]


我做错了什么?是否存在真正的问题?

您应该检查返回的Uri的方案。如果是内容,那么您的查询是合理的,但是文件检查不是因为它不是文件。如果方案是file,那么文件检查是值得一试的,但是您的查询充其量是毫无意义的,可能会崩溃

您的意图对象中也不包括CATEGORY_OPENABLE,这将限制您使用更可能实现OpenableColumns的数据源,并允许您对内容执行一些有用的操作,例如读入


但是,除此之外,没有要求每个ACTION\u GET\u内容和ACTION\u PICK实现都支持OpenableColumns并返回非零大小。

ACTION\u GET\u内容应该在哪种意图中?二者都那么如果他们不支持OpenableColumns呢?我需要读取整个输入流以获得文件大小?看起来weird@RafaelLima:ACTION\u GET\u内容应在以下哪种意图中?-如果你是说CATEGORY_OPENABLE,那么它至少应该在ACTION_GET_CONTENT Intent中。我对文件内容不太使用ACTION\u PICK,因此我忘记了它的规则。我需要读取整个输入流以获得文件大小?这看起来很奇怪-那么我想没有这个尺寸就生活吧。