Java 将MediaPlayer.SetDataSource()设置为'/存储/模拟/0/…';
我正在获取手机上的媒体(使用Java 将MediaPlayer.SetDataSource()设置为'/存储/模拟/0/…';,java,c#,android,xamarin,xamarin.forms,Java,C#,Android,Xamarin,Xamarin.forms,我正在获取手机上的媒体(使用ContentResolver),但返回的路径为/storage/emulated/0/…,并尝试将其用于mediaPlayer.SetDataSource()生成Java.IO.FileNotFoundException。我意识到这条路径可能不是一条真正的路径,但如何从这条路径中获得真正的路径呢 当项目文件夹中有资产时,MediaPlayer工作正常。但我无法让它与其他文件一起工作。我已经为读取外部存储设置了权限 虽然我宁愿用C#来回答,但用Java来回答可能就足够
ContentResolver
),但返回的路径为/storage/emulated/0/…
,并尝试将其用于mediaPlayer.SetDataSource()
生成Java.IO.FileNotFoundException
。我意识到这条路径可能不是一条真正的路径,但如何从这条路径中获得真正的路径呢
当项目文件夹中有资产时,MediaPlayer
工作正常。但我无法让它与其他文件一起工作。我已经为读取外部存储设置了权限
虽然我宁愿用C#来回答,但用Java来回答可能就足够了
编辑
我见过一些处理类似问题的答案,但它们都假设我有一个Uri
。而上面的方法返回一个字符串。我还没有成功地将其转换为Uri,因此我甚至无法测试这些解决方案。访问
您可以了解如何从中获取实际路径。尝试传递此路径,而不是传递硬编码值(/storage/emulated/0/)
别忘了在清单文件中添加权限“我意识到这个路径可能不是真正的路径”--/storage/emulated/0/
肯定没有什么问题。文件是否存在是另一回事。“我已经为READ_EXTERNAL_STORAGE设置了权限。”--我不知道Xamarin如何处理运行时权限,但您很可能也需要它。还请注意,您使用的方法不适用于所有介质(例如,可移动存储上的介质)。@Commonware它不适用于可移动介质。这是我用USB电缆和Windows资源管理器放在手机上的文件。通过问题中提到的方法,路径返回为Data
。那可能有什么问题呢?我说有可能。我不明白。正如我在问题中所说,我已经设置好了。“我已经设置好了”--如果“设置”是指“你安排在应用程序清单中获取它”,这是不够的。“我还没有成功地将其转换为Uri”——在Java中,这将是Uri.fromFile(新文件(某物))
,其中something
是一个字符串,包含基于/storage/emulated/0/
的值。不过,这不会改变你的结果。
String path= Environment.getExternalStorageDirectory()+"/yourFolder/";