[英]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_CONTENT
和ACTION_PICK
實現都支持OpenableColumns
並返回非零大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.