我的 list 中有一个 ContentProvider,当我使用硬编码字符串完全定义它们时,它可以工作。例如
<provider android:name="com.myprovider" android:authorities="com.myprovider"/>
工作完美,但是 ContentProviders 在一个被多个项目使用的库中,我不希望权限冲突,所以我尝试执行以下操作。
<provider android:name="com.myprovider" android:authorities="@string/myProviderAuthority">
这样我应该能够在单个 strings.xml 文件中定义我的所有权限,并且应用程序之间不会发生冲突,因为我应该能够使用每个应用程序资源覆盖系统来更改它们。
但是,当我尝试使用 @string 构建时,它似乎给了我一个格式错误的 list 错误,并说“提供者没有 INCUDE(是的,它说 INCUDE)当局致敬”
我可以不使用资源字符串来向当局致敬吗,每次我需要在两个位置保持常量时我都会感到恶心。我们的 QA 部门可能很难发现权限冲突,我不希望事情变得不同步,否则会导致困惑。有人知道为什么我的代码不起作用吗?
最佳答案
我遇到了类似的问题,但使用了 android:versionCode
属性。当我尝试在资源中定义版本代码并在 list 中使用对它的引用时,Android Market 甚至禁止我发布应用程序。事实证明,这种行为的原因相当简单。资源可能会根据当前配置而变化,并且此值在任何情况下都必须相同。
可能这就是为什么具有权限引用的内容提供者也不起作用的原因。在我看来,使用这样的引用并不是一个好主意,因为不能保证应用程序中的权限资源只有一个值。我知道您可以非常小心地保留此资源的单个实例,但没有对此进行特殊的编译器或系统检查,因此无法信任它。
关于android - 为 android :authorities in a ContentProvider 使用@string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6461776/