我可以通过以下代码在Unity Editor中使用UnityWebRequestMultimedia.GetAudioClip加载音频,但是当我在Android上运行它时,我无法从用户的设备加载任何文件。
void Start() {
audio = GetComponent<AudioSource>();
string fullPath = Path.Combine("file://" + previewSong);
StartCoroutine(GetAudioClip(fullPath));
}
IEnumerator GetAudioClip(string fullPath)
{
using (var uwr = UnityWebRequestMultimedia.GetAudioClip(fullPath, AudioType.MPEG))
{
((DownloadHandlerAudioClip)uwr.downloadHandler).streamAudio = true;
yield return uwr.SendWebRequest();
if (uwr.isNetworkError || uwr.isHttpError)
{
debugSongPath2.text = uwr.error;
yield break;
}
DownloadHandlerAudioClip dlHandler = (DownloadHandlerAudioClip)uwr.downloadHandler;
if (dlHandler.isDone)
{
audio.clip = dlHandler.audioClip;
if (audio.clip != null)
{
audio.clip = DownloadHandlerAudioClip.GetContent(uwr);
Debug.Log("Playing song using Audio Source!");
}
else
{
Debug.Log("Couldn't find a valid AudioClip.");
}
}
else
{
Debug.Log("The download process is not completely finished.");
}
}
}
我遇到的错误根据URL开头的形式而有所不同。
Path.Combine("file:/" + previewSong);
malformed URL
Path.Combine("file://" + previewSong);
http:/1.1 404 not found
Path.Combine("file:///" + previewSong);
unknown error
Path.Combine("file:////" + previewSong);
unknown error
当我在手机上输出URL时,它们看起来是正确的。下面是一个示例路径:
file:///storage/emulated/0/Music/Deorro/Deorro - Five Hours.mp3
我之前用WWW.GetAudioClip成功地从这个网址加载了音频,但那已经过时了。这让我相信URL是正确的。我尝试过使用开发模式和不使用开发模式进行构建。不知道还能尝试什么。我想让它在UnityWebRequestMultimedia上工作,但是如果有一个替代的,更有效的加载本地文件的方法,我是开放的。
发布于 2021-01-15 14:39:48
问题出在新的Android11作用域存储上,它禁用了READ_EXTERNAL_STORAGE。我不得不将以下内容添加到我的AndroidManifest.xml中:
<manifest ... >
<!-- This attribute is "false" by default on apps targeting Android 10 or higher. -->
<application android:requestLegacyExternalStorage="true" ... >
...
</application>
</manifest>
https://developer.android.com/training/data-storage/use-cases#opt-out-scoped-storage
发布于 2020-11-23 16:22:42
更改您的构建设置以授予对外部SD卡的写入权限。我正在使用下面的代码从android中的指定位置获取音频。我试过你的代码,但不知何故不起作用。
IEnumerator GetAudioClip2(string fullPath)
{
debugSongPath2.text = previewSong;
using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(fullPath, AudioType.MPEG))
{
yield return www.SendWebRequest();
if (www.isNetworkError || www.isHttpError)
{
Debug.Log(www.error);
}
else
{
AudioClip myClip = DownloadHandlerAudioClip.GetContent(www);
audioSource.clip = myClip;
audioSource.Play();
}
}
}
我的完整路径是"file:///storage/emulated/0/Samsung/Music/Over Horizon.mp3“
https://stackoverflow.com/questions/64963261
复制相似问题