我正在尝试从光标中读取内容:
cursor = context.getContentResolver().query(TASKS_URI, null, null, new String[]{"-1", "true"}, null);
TASKS_URI在哪里:
private final static Uri TASKS_URI = Uri.parse("content://org.dayup.gtask.data/tasks");
所以我想做的就是从另一个应用程序中获取光标。
在我的manifest.xml中,我将我的权限定义为:
<uses-permission android:name="org.dayup.gtask.permission.READ_TASKS"/>
问题是如果我的应用程序安装在另一个应用程序之前(在这种情况下是gtask),我会收到以下错误:
05-08 15:26:45.380: ERROR/ActivityThread(18564): Failed to find provider info for org.dayup.gtask.key
05-08 15:26:45.390: ERROR/AndroidRuntime(18509): FATAL EXCEPTION: Thread-12
java.lang.SecurityException: Permission Denial: reading org.dayup.gtask.GoogleTaskProvider uri content://org.dayup.gtask.data/tasks from pid=18509, uid=10114 requires org.dayup.gtask.permission.READ_TASKS
at android.os.Parcel.readException(Parcel.java:1322)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:160)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114)
at android.content.ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:372)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:408)
at android.content.ContentResolver.query(ContentResolver.java:264)
如果我重新安装我的应用程序或我的应用程序安装后其他应用程序一切正常。 有关如何在运行时重新获取这些权限的任何想法吗?
答案 0 :(得分:4)
有一种解决方法。 诀窍是将权限定义为您自己的权限。
以下是一个例子:
<uses-permission android:name="com.timsu.astrid.permission.READ_TASKS" />
<permission android:name="com.timsu.astrid.permission.READ_TASKS"
android:permissionGroup="android.permission-group.PERSONAL_INFO"
android:protectionLevel="dangerous" android:label="read astrid tasks data" />
<uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" />
<!-- dato gtask -->
<uses-permission android:name="org.dayup.gtask.permission.READ_TASKS" />
<permission android:name="org.dayup.gtask.permission.READ_TASKS"
android:permissionGroup="android.permission-group.PERSONAL_INFO"
android:protectionLevel="dangerous" android:label="read dato gtasks tasks data" />
答案 1 :(得分:1)
Android的安全页面说
在应用程序安装时,应用程序请求的权限由程序包安装程序授予,基于对应用程序的签名进行检查,声明这些权限和/或与用户。 在应用程序运行时未对用户进行任何检查:它在安装时被授予了特定权限,并且可以根据需要使用该功能,或者未授予权限以及任何使用该权限的尝试功能将在不提示用户的情况下失败。 1
所以我认为你不能改变运行时权限。我可以看到解决这个问题的唯一方法是使用android.permission.INSTALL_PACKAGES
设置的一种包装应用程序,检查所需的应用程序并在安装之前安装它。