获取" SecurityException:Permission Denial"即使已添加许可

时间:2013-06-21 04:47:40

标签: android android-permissions

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

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

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>

有什么想法吗?

1 个答案:

答案 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) {
}