我最近发布了一个从内容提供商处读取数据的小部件。它似乎在测试中运行良好,但我收到了许多与内容提供商的权限相关的崩溃报告。
这是我从崩溃报告中得到的错误:
java.lang.SecurityException: Permission Denial: reading com.anydo.providers.TasksContentProvider uri content://com.anydo.provider/tasks from pid=24036, uid=10142 requires com.anydo.provider.permission.READ_ANYDO_TASKS, or grantUriPermission()
从我从不同问题中可以看到的这可能与清单文件有关,所以这就是:
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="17" />
<uses-permission android:name="com.anydo.provider.permission.READ_ANYDO_TASKS" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver android:name="AnydoWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/anydo_widget_provider" />
</receiver>
<activity
android:name="com.gongchangstudio.minimalanydowidget.WidgetSettings"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
</intent-filter>
</activity>
<service android:name="com.gongchangstudio.minimalanydowidget.TaskWidgetService"
android:permission="android.permission.BIND_REMOTEVIEWS"
android:exported="false" />
</application>
有什么想法吗?
答案 0 :(得分:0)
在Stack Overflow上找到答案 - Android Permission denial in Widget RemoteViewsFactory for Content
我猜这与在同一个线程上运行的权限有关,因为将以下代码添加到onDataSetChanged()可以解决问题。
Thread thread = new Thread() {
public void run() {
query();
}
};
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
}