1

我最近发布了一个从内容提供者读取数据的小部件。它在测试中似乎运行良好,但我收到了许多与内容提供者权限相关的崩溃报告。

这是我从崩溃报告中得到的错误:

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>

有任何想法吗?

4

1 回答 1

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) {
}
于 2013-06-25T01:08:12.720 回答