【问题标题】:How to refer to a resource not in the Library Project, but only in the dependent Application Project?如何引用不在图书馆项目中的资源,而仅在依赖的应用程序项目中?
【发布时间】:2013-06-08 22:57:03
【问题描述】:

我正在将我的一个应用程序变成几个类似的应用程序并使用一个基础库项目。我想在相关应用程序中加载将位于res/raw/welcome.m4a 中的视频。

这是在使用图书馆项目之前的做法:

vv.setVideoURI(Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.welcome));

这会在我的库项目中产生错误,因为 res/raw/welcome.m4v 不存在,它只会在 App Project res/ 文件夹中,并且每个应用程序都会有所不同。

我目前的解决方法是在基础库项目中创建一个虚拟res/raw/welcome.m4v,这样它就不会抱怨了。

所以我的问题是我如何在图书馆项目中拥有引用图书馆项目中不存在的资源的代码?

【问题讨论】:

  • 我建议让托管应用程序传入要用于您的库项目的路径。恕我直言,图书馆项目不应该知道也不关心视频在哪里:原始资源、本地文件、rtsp URL、http URL 等。
  • 我该怎么做?活动代码本身位于图书馆项目中。我需要在活动外部配置它。我会在字符串文件中这样做吗?
  • 某处,宿主项目需要连接到这个库。无论在哪里,传递值。例如,将其作为额外的 Intent 用于将控制权从库传递给此活动。
  • 我有一个类似的问题(不同之处在于我事先不知道电影的名称)并尝试完全按照 CommonsWare 的建议:使用 Uri 创建一个类似 pixelearth 的 Intent在他的问题中,使用依赖应用程序的包名称,但是当我尝试在库的代码中播放电影时,我得到“无法打开内容”。一个有效的代码示例会很有帮助!

标签: android library-project


【解决方案1】:

如果只是偶尔发生,你可以试试这个:

vv.setVideoURI(Uri.parse("android.resource://"+getPackageName()+"/"+getResources().getIdentifier("welcome", "raw", getPackageName())));

性能不如使用 id,但它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 2017-05-14
    相关资源
    最近更新 更多