Android:从内容URI获取文件URI?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (45)

在我的应用程序中,用户选择一个音频文件,然后应用程序处理。问题是,为了让应用程序做我希望它做的音频文件,我需要URI是文件格式。当我使用Android的本地音乐播放器浏览应用程序中的音频文件时,URI是一个内容URI,如下所示:

content://media/external/audio/media/710

但是,使用流行的文件管理器应用程序Astroa,我得到以下信息:

file:///sdcard/media/audio/ringtones/GetupGetOut.mp3

后者对我来说更容易使用,但是我当然希望这个应用程序具有用户选择的音频文件的功能,而不管他们使用什么程序来浏览他们的集合。所以我的问题是,有没有办法将content://将URI样式转换为file://?否则,你有什么建议我解决这个问题吗?下面是调用选择器的代码,以供参考:

Intent ringIntent = new Intent();
ringIntent.setType("audio/mp3");
ringIntent.setAction(Intent.ACTION_GET_CONTENT);
ringIntent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(Intent.createChooser(ringIntent, "Select Ringtone"), SELECT_RINGTONE);

我使用内容URI执行以下操作:

m_ringerPath = m_ringtoneUri.getPath();
File file = new File(m_ringerPath);

然后用上述文件做一些FileInputStream内容。

提问于
用户回答回答于

可以使用ContentResolver获取file://content://URI:

String filePath = null;
Uri _uri = data.getData();
Log.d("","URI = "+ _uri);                                       
if (_uri != null && "content".equals(_uri.getScheme())) {
    Cursor cursor = this.getContentResolver().query(_uri, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null);
    cursor.moveToFirst();   
    filePath = cursor.getString(0);
    cursor.close();
} else {
    filePath = _uri.getPath();
}
Log.d("","Chosen path = "+ filePath);

扫码关注云+社区