代码之家  ›  专栏  ›  技术社区  ›  Daniele

Uri文件大小始终为0

  •  2
  • Daniele  · 技术社区  · 7 年前

    uri (android.net.Uri)

    我需要在文本视图中显示它的大小。我试着这样做:

    这是我从用户库获取文件的地方:

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.debug_layout);
    
            Intent selectIntent = new Intent(Intent.ACTION_GET_CONTENT);
            selectIntent.setType("audio/*");
            startActivityForResult(selectIntent, AUDIO_REQUEST_CODE);
    
        }
    
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == AUDIO_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
                if ((data != null) && (data.getData() != null)) {
                    audio = data.getData();
                }
            }
        }
    

    然后我将其传递给下一个活动,如下所示:

    Intent debugIntent = new Intent(this, Debug.class);
            Bundle bundle = new Bundle();
            bundle.putString("audio", audio.toString());
            debugIntent.putExtras(bundle);
            startActivity(debugIntent);
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.debug_layout);
    
        Intent intent = this.getIntent();
        Bundle bundle = intent.getExtras();
        audio = Uri.parse((String) bundle.get("audio"));
    
        File file = new File(audio.getPath());
        long size = file.length();
        if (file.exists()) {
            Toast.makeText(this, "exists", Toast.LENGTH_SHORT).show();
        }
        filesize = (TextView) findViewById(R.id.file_size);
        filesize.setText("file size: ".concat(String.valueOf(size)));
    
    }
    

    file.length()

    我怎样才能解决这个问题?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Daniele    7 年前

    最后,我这样修复了它:

    private String getRealSizeFromUri(Context context, Uri uri) {
            Cursor cursor = null;
            try {
                String[] proj = { MediaStore.Audio.Media.SIZE };
                cursor = context.getContentResolver().query(uri, proj, null, null, null);
                int column_index = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE);
                cursor.moveToFirst();
                return cursor.getString(column_index);
            } finally {
                if (cursor != null) {
                    cursor.close();
                }
            }
        }
    

    我想这就是普斯金在评论中所说的,但他没有费心解释。。。

    无论如何,这是一个可行的解决方案,希望对其他用户也有用