gpt4 book ai didi

java - DocumentsProvider 标签可以在针对 API < 19 的 Android list 中使用吗?

转载 作者:行者123 更新时间:2023-12-01 23:24:33 24 4
gpt4 key购买 nike

所以我正在尝试实现 Android 4.4 (KitKat) 中引入的新存储访问框架内容。我已经延长了 DocumentsProvider类为described on YouTube ,有效 great当我在 KitKat (API 19) 设备上尝试时。我有一个内容提供商,我的应用程序充当客户端 - 这是一个很棒的文件选择器,可以取代我必须自定义编写的文件选择器。

但是当代码在较旧的设备(例如 API 8 (Froyo))上运行时,它会在启动时终止并出现如下错误:

E/AndroidRuntime(  702): FATAL EXCEPTION: main
E/AndroidRuntime( 702): java.lang.RuntimeException: Unable to get provider com.example.MyProvider: java.lang.ClassNotFoundException: com.example.MyProvider in loader dalvik.system.PathClassLoader[/data/app/com.example-2.apk]

非常有道理——DocumentsProvider类是在 KitKat 中引入的,所以它当然不能在 Froyo (API 8) 中运行。

为了尝试处理较旧的设备并使其回退到我之前编写的文件选择器,我包装了引用 MyProvider 的所有代码。 (我的 DocumentsProvider )与 if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)有条件...所以你会认为我会安全...

问题是,DocumentsProvider要求提供商在 AndroidManifest.xml 中注册在<provider>内元素。我看不出有什么办法可以说“忽略这一点,不要尝试在较旧的 API 上加载 MyProvider”。我看不到任何声明 <provider> 的方法以编程方式。或任何类型的遗留解决方案。这似乎是硬编码到 list 中的“全有或全无”的事情。

如果我删除 <provider>根据 list 中的内容,该应用程序在 Froyo 中完美运行,没有错误(它根本不尝试加载或使用 DocumentsProvider)。但我确实需要它让 KitKat 能够使用新的存储访问功能。

大家有什么想法吗?是否可以使用DocumentProvider在某种程度上它可以在 API >= 19 上工作,但在旧设备上完全被忽略?某种棘手的包装类......或 stub ContentProvider类...或某事?无论我能让 Froyo 认为存在什么类,它都永远不会被调用/使用,至少被我的应用程序调用/使用。

非常感谢。

最佳答案

在您的资源中定义一个 boolean 值。对于 API 级别 19,将其设置为 true,对于其他所有内容,将其设置为 false

所以在res/values/bool.xml中:

<item name="provider_enabled" type="bool">false</item>

res/values-v19/bool.xml中:

<item name="provider_enabled" type="bool">true</item>

现在在 list 中,将以下内容添加到您的提供程序:

android:enabled="@bool/provider_enabled"

关于java - DocumentsProvider <provider> 标签可以在针对 API < 19 的 Android list 中使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20213601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com