2017-03-07 34 views
1

這是我的文件選擇從所選圖像獲取圖像的確切文件大小在畫廊

private void showFileChooser() { 
    Intent intent = new Intent(); 
    intent.setType("image/*"); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST); 
} 

然後onActivityResult()

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) { 

     filePath = data.getData(); 
     try { 
      bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), filePath); 

      System.out.println(bitmap.getByteCount()); 

      int w = bitmap.getWidth(); 
      int h = bitmap.getHeight(); 



      if (w!= 512 || h!= 512) 
      { 
       txvLogoError.setText("Invalid image dimensions. Please choose another."); 
      } 
      else 
      { 
       txvLogoError.setText(""); 
       imbAppLogo.setPadding(10,10,10,10); 
       imbAppLogo.setImageBitmap(bitmap); 
      } 


     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

我的問題是代碼,我怎麼能得到所選圖像的確切文件大小?我試圖File.length(),但結果是0

+0

嘗試首先檢查文件是否存在,因爲如果該文件存在,則file.length()應該給出大小。 – sadat

+0

好吧,我會嘗試,但我選擇的圖片顯示在我的imagebutton –

+0

看到這個http://www.mkyong.com/java/how-to-get-file-size-in-java/ –

回答

10

試試這個。

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     int dataSize=0; 
     if (requestCode == 2 && resultCode == RESULT_OK) 
     { 
      Uri uri = data.getData(); 
      String scheme = uri.getScheme(); 
      System.out.println("Scheme type " + scheme); 
      if(scheme.equals(ContentResolver.SCHEME_CONTENT)) 
      { 
       try { 
        InputStream fileInputStream=getApplicationContext().getContentResolver().openInputStream(uri); 
        dataSize = fileInputStream.available(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
       System.out.println("File size in bytes"+dataSize); 

      } 
      else if(scheme.equals(ContentResolver.SCHEME_FILE)) 
      { 
       String path = uri.getPath(); 
       try { 
        f = new File(path); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
       System.out.println("File size in bytes"+f.length()); 
      } 

     } 
    } 
+0

引起:java.lang.IllegalArgumentException:URI中的預期文件方案:content:// media/external/images/media/12973 –

+0

順便說一句,我正在使用Uri –

+0

@Paul查看編輯後的答案:) –

0

嘗試以下方法,

File f = new File(filePath.getPath()); 
long size = f.length(); 

否則,你可以嘗試

Cursor returnCursor = getContentResolver().query(filePath, null, null, null, null); 

int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME); 
int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE);