簡體   English   中英

如何正確獲取 android 圖像大小

[英]How to correctly get android image size

我有一個應用程序需要用戶 select 圖像,然后從圖像中提取一些信息。

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()));
    
    
    }

該應用程序目前正在生產中,對於某些圖像,用戶的size == 0 (我們正在談論圖像文件,我懷疑任何用戶在他的手機中都有一個大於整數的文件)

我無法在 dev 中重現錯誤 [我的意思是對於我可用於測試所有文件的設備返回有效大小]

我檢測到的錯誤發生在android 10中,在摩托羅拉手機中[但由於樣本小,這可能只是巧合]

我做錯了什么? 有真正的問題嗎?

您應該檢查您返回的Uri的方案。 如果它是content ,那么您的query()是合理的,但File檢查不是(因為它不是文件)。 如果方案是file ,那么File檢查值得一試,但您的query()充其量是毫無意義的(並且可能會崩潰)。

您也不要在您的Intent對象中包含CATEGORY_OPENABLE ——這將限制您使用更有可能實現OpenableColumns的數據源,並讓您對內容做一些有用的事情(例如,讀入它)。

但是,除此之外,沒有要求每個ACTION_GET_CONTENTACTION_PICK實現都支持OpenableColumns並返回非零大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM