当前位置: 首页 > 面试题库 >

Android-在应用程序项目中具有提供者权限

东方智敏
2023-03-14
问题内容

一个android库项目包含一些提供者,其提供者的权限如以下Contract类中的定义:

public static final String CONTENT_AUTHORITY = "my.com.library.providers.tester";
private static final Uri BASE_CONTENT_URI = Uri.parse("content://" + CONTENT_AUTHORITY);

现在有许多使用此库项目的应用程序项目。我目前遇到的问题是,对于每个应用程序项目,我都需要在图书馆项目中为每个应用程序单独拥有一个分支,以便拥有唯一的内容权限。这造成了一些版本管理问题(例如,将功能/错误修复从一个分支传播到其他每个分支等)。相反,我想将定义内容权限的责任委托给app项目。有没有办法做到这一点?


问题答案:

该应用程序是唯一绝对需要了解权限的应用程序,因为它是在<provider>带有android:authorities属性的清单中声明的应用程序。

因此,原则上,只要您从提供程序中删除所有特定于授权的逻辑,它就应该“正常工作”,例如:

  • 这些静态数据成员(现在移至托管应用)
  • UriMatcher(自己滚动一些不检查权限,但专注于其余部分的内容Uri

如果出于某种原因,您绝对确定您的提供者需要了解其权限,那么在将提供者用于实际工作之前,应用必须将其提供给提供者。可能的方法包括:

  • 由于a ContentProvider是自然单例,因此将其分配给静态数据成员,然后通过自定义Application类中的自定义方法向其提供授权字符串(因为首先初始化提供程序,所以应该可以)

  • 如果你只支持API级别11+,有自定义Application类使用call()ContentResolver提供权威的ContentProvider

  • 假设只有真正的调用(例如to query()insert())是有效的,并且只是根据Uri您看到的第一个调用中的内容来延迟初始化您的权限



 类似资料:
  • 我在尝试在Android emulator中执行应用程序升级时遇到了一些问题。该场景的流程来自一个活动,我将执行打开片段A的AsyncTask A,然后在AsyncTask A中,我将检查版本升级是否可用。 如果可用并且用户从片段A中选择了“OK”,我将转到AsyncTask B打开片段B,它向用户显示一条消息,说明正在进行升级。在AsyncTask B doInbackground()中,我将执

  • 我有两个app:app1和app2。 App2具有: paths.xml: App2在其活动中从App1接收获取映像URI的请求。确定URI后,App2活动执行以下操作: 从App2接收回结果后,App1执行以下操作: 在App1中,从App2返回时,我得到以下异常: java.lang.SecurityException:权限拒绝:从ProcessRecord{52a99eb0 3493:com

  • 并且我在App2清单中添加了权限: 但我得到了这个错误: java.lang.SecurityException:拒绝权限:从ProcessRecord{46a1928 24678:com.x.x.myApplication11/U0a165}(PID=24678,UID=10165)打开提供程序com.x.x.adminapp.read_database或com.x.x.adminapp.wri

  • 如何使用多个使用相同库的应用程序创建gradle根项目。我希望以包含以下内容的tar和zip文件结束: 导致错误

  • 我想知道将应用程序分成多个独立部分的最佳方式(如果可能的话)是什么。例如,如果你有三个独立的单元来做不同的事情,你可能有两个不同的应用程序,它们结合了这三分之二的部分,你会怎么做? 我来自windows后台,在Visual Studio中,您可以在一个解决方案下拥有多个独立的项目,然后您可以在需要的地方重用它们。 你能在Android系统中使用这个吗?我知道我可以把东西放在不同的包中,但不确定如何

  • 我在使用Android Studio进行纯Java项目时遇到了麻烦,我想知道是否有人能帮忙? 我试图按照Heroku Java/Gradle教程中的以下步骤进行操作:https://devcenter.Heroku.com/articles/getting-starting-with-gradle-on-heroku#push-local-changes 我试图使用Android Studio编译