【问题标题】:how to get audio absolute path in Android using createChooser如何使用 createChooser 在 Android 中获取音频绝对路径
【发布时间】:2017-02-26 01:05:43
【问题描述】:

我想使用 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();
}

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

【问题讨论】:

    标签: android


    【解决方案1】:

    首先,您需要意识到createChooser() 与您从startActivityForResult() 调用返回的Uri 的格式无关。任何ACTION_GET_CONTENT 活动都可以交回它想要的任何有效Uri。即使您省略了createChooser() 部分,您也可以从您的startActivityForResult() 调用中获得那种Uri

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

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

    如果方案是content——就像这里的情况——那么Uri可以指向任何东西

    • 您可以访问的外部存储文件
    • 您无法访问的可移动存储上的文件
    • 另一个应用程序内部存储中的文件,您无法访问
    • 另一个应用的资产,不是文件
    • 来自数据库BLOB 列的值,它不是文件
    • 动态生成的值,与此网页相同,不是文件
    • 将从 Internet 流式传输的内容,而不是设备上的文件
    • 等等

    使用ContentResolveropenInputStream()(也许还有openOutputStream())来处理Uri 标识的内容。

    如果您碰巧使用需要File 的第三方库,请切换到可以使用InputStream 的更好的库。

    如果找不到更好的库,则必须使用 InputStream 将内容的字节复制到您控制的某个文件(例如,在 getCacheDir() 中),然后使用该文件。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 2010-09-21
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多