如何使用createChooser在Android中获取音频绝对路径

时间:2017-02-25 16:59:12

标签: android

我想使用createChooser从URI路径获取绝对路径。我该怎么办?如果您知道解决此问题的解决方案,请告知我。顺便说说, URI路径显示遵循路径:

content://com.android.providers.media.documents/document/audio%3A38

正常路径显示遵循路径:

/document/audio:38

这是我的代码:

 public void set_music_path(View view) {
    Intent intent = new Intent();
    intent.setType("audio/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "음악을 선택해주세요."), 1);
}

protected void onActivityResult(int req, int res, Intent data){
    super.onActivityResult(req, res, data);

    Uri uri = data.getData();
    Toast.makeText(this, uri.toString(), Toast.LENGTH_SHORT).show();
    Toast.makeText(this, uri.getPath().toString(), Toast.LENGTH_SHORT).show();
}

我是韩国学生,所以有一些语法错误。 如果有语法错误,忽视我的错误

1 个答案:

答案 0 :(得分:0)

首先,您需要意识到createChooser()与您从Uri电话中获取的startActivityForResult()格式无关。任何ACTION_GET_CONTENT活动都可以返回它想要的任何有效Uri。即使您离开了Uri部分,也可以从startActivityForResult()来电中获得createChooser()这种Uri

其次,您需要意识到ACTION_GET_CONTENT不是文件。 Uri个活动可以返回Uri指向活动所需的任何内容。

如果 file的方案恰好是getPath(),那么content将是一个文件系统路径,指向一个(大概)你的文件可以访问。

如果方案是Uri - 就像这里的情况一样 - 那么BLOB可以指向任何

  • 您可以访问的外部存储上的文件
  • 您无法访问的可移动存储上的文件
  • 另一个应用内部存储的文件,您无法访问
  • 另一个应用的资产,不是文件
  • 数据库的ContentResolver列中的值,该值不是文件
  • 动态生成的值,即此网页的方式,不是文件
  • 将从互联网流式传输的内容,该内容不是设备上的文件
  • 等等

使用openInputStream()openOutputStream()(可能还有Uri)来处理File标识的内容。

如果您正在使用某个需要InputStream的第三方库,请切换到可以使用InputStream的更好的库。

如果找不到更好的库,则必须使用getCacheDir()将内容的字节复制到您控制的某个文件中(例如,在body { background-color: #999; font-family: times; } header { height: 450px; background: url(../Pictures/Flensburg.jpg) center center fixed; background-size: cover; } nav { float: right; 30px 30px 0 0; } ul{ display: inline; align: right; list-style-type: none; padding: 10px } li { display: inline-block; padding: 10px } a { background-color: #b3b3b3; color: white; text-transform: uppercase; } h1 { font-size: 72px width: 100%; text-align:center; }中),然后使用该文件