【问题标题】:Custom content provider access from another app从另一个应用程序访问自定义内容提供程序
【发布时间】:2018-09-24 16:29:10
【问题描述】:

我有两个应用程序。两者中的一个有一个自定义内容提供程序,它就像一个魅力。

APP A -> 有提供者的那个

APP B -> 需要提供者提供数据的应用程序

在这种情况下一切正常:

1st : 安装应用 A

第二个:安装应用B

但是当我这样做时:

第一个:安装应用 B

第 2 次:安装应用 A

我得到了错误:

09-19 13:07:22.576: E/AndroidRuntime(14621): Caused by: java.lang.SecurityException: Permission Denial: opening provider 
uk.co.ringsizer.ui.BirthProvider from ProcessRecord{450c14c8 14621:uk.co.gemtv/u0a360} 
(pid=14621, uid=10360) requires com.eir.provider.Size.READ_DATABASE 
or com.eir.provider.Size.WRITE_DATABASE

我的权限在清单文件中明确说明,并且它们是正确的,因为如果我以不同的顺序安装应用程序,它就可以工作。

这是我第一次使用内容提供程序,而且我对 Android 还比较陌生,所以对于更有经验的开发人员来说,这个问题可能很明显。

有什么想法吗?有没有其他人遇到过同样的问题?

提前致谢。

【问题讨论】:

标签: android android-contentprovider android-permissions


【解决方案1】:

定义自定义<permission> 的应用必须在通过<uses-permission> 请求它的应用之前安装。如果安装顺序错误,<uses-permission> 应用程序将无法获得权限,必须卸载并重新安装。

Custom permissions in general are risky for SDK apps.

【讨论】:

  • 自从 PUBLIC 共享偏好被弃用以来,我认为我唯一可以使用的是内容提供者。你有类似的建议吗?
  • @user3328051:你的问题不在于使用ContentProvider——任何涉及自定义权限的IPC都会遇到同样的问题。此外,您的带有<uses-permission> 的应用程序需要处理用户不想要其他应用程序、无法安装其他应用程序(例如,它与他们的设备不兼容)、安装并稍后卸载其他应用程序等情况。
  • 抱歉 4 年了,但是,使用 LoaderManager 时如何处理 SecurityException
  • @Pankaj:我建议您提出一个单独的 Stack Overflow 问题,在其中提供 minimal reproducible example 并完整解释您的担忧。
【解决方案2】:

确保两个应用在清单中都有权限属性。

<permission android:name="com.example.permission.READ" />

我在消费应用程序中只有 use-permission 属性,而正是这个问题。如果首先安装内容提供程序应用程序,它将起作用,但如果第二个安装内容提供程序应用程序,它将失败。

当消费客户端应用也具有权限属性时,无论应用安装顺序如何,它都可以工作。

【讨论】:

  • 澄清一下,权限属性定义了权限。为了使其工作,两个应用程序必须使用相同的签名才能定义相同的权限。如果两个应用程序都使用相同的签名,这将解决 CommonsWare 描述的安装顺序问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多