【问题标题】:Set MediaPlayer.SetDataSource() to '/storage/emulated/0/...'将 MediaPlayer.SetDataSource() 设置为 '/storage/emulated/0/...'
【发布时间】:2017-01-01 22:35:33
【问题描述】:

我正在获取电话上提到的here 的媒体(使用ContentResolver),但返回的路径是/storage/emulated/0/... 的形式,并且尝试将其用于mediaPlayer.SetDataSource() 会产生Java.IO.FileNotFoundException。我意识到这条路径可能不是真正的路径,但是我如何从这条路径中获得真正的路径?

当我在项目文件夹中有资产时,MediaPlayer 工作正常。但我无法让它与其他文件一起使用。我已经设置了READ_EXTERNAL_STORAGE的权限。

虽然我宁愿有 C# 的答案,但 Java 的答案可能就足够了。

编辑

我已经看到一些处理类似事情的答案,但他们都认为我有一个Uri。而上面的方法返回一个字符串。而且我没有成功尝试将其转换为 Uri,因此我什至无法测试这些解决方案。

【问题讨论】:

  • “我意识到这条路可能不是真正的路”——/storage/emulated/0/ 肯定没有错。该文件是否存在是另一回事。 “我已经设置了 READ_EXTERNAL_STORAGE 的权限。” - 我不知道 Xamarin 如何处理运行时权限,但你很可能也需要它。另请注意,您使用的方法不适用于所有媒体(例如,可移动存储上的媒体)。
  • @CommonsWare 它不在可移动媒体上。这是我使用 USB 电缆和 Windows 资源管理器放在手机上的文件。并且通过问题中提到的方法将路径返回为Data。那么可能是什么问题呢?
  • 我提到runtime permissions 是一种可能性。
  • 我不明白。正如我在问题中所说 - 我已经设置好了。
  • “我已经设置了”——如果“设置”的意思是“你安排在应用程序的清单中获取它”,那是不够的。 “而且我没有成功尝试将其转换为 Uri”——在 Java 中,这将是 Uri.fromFile(new File(something)),其中 something 是一个 String,其中包含基于 /storage/emulated/0/ 的值。不过,这不会改变您的结果。

标签: java c# android xamarin xamarin.forms


【解决方案1】:

访问android: Get real path from uri

您可以了解如何从中获得真正的路径。

【讨论】:

    【解决方案2】:

    尝试传递 this 而不是传递硬编码值 (/storage/emulated/0/)

    String path= Environment.getExternalStorageDirectory()+"/yourFolder/";
    

    不要忘记在清单文件中添加权限

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-30
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-03
      相关资源
      最近更新 更多