2013-06-21 2 views
0

Недавно я выпустил виджет, который считывает данные у поставщика контента. Казалось, что он отлично работает при тестировании, но я получил несколько отчетов о сбоях, связанных с разрешениями для поставщика контента.Получение «SecurityException: Permission Denial», хотя было добавлено разрешение

Это ошибка, я получаю от отчетов о сбоях:

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

Не нужно ли сначала определять разрешение? '<разрешение android: name =" com.anydo.provider.permission.READ_ANYDO_TASKS " android: protectionLevel =" подпись "/>' Я не уверен, просто подумайте, что это может помочь – SeanSWatkins

ответ

0

нашел ответ в другом месте на переполнение стека - 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) { 
} 
+0

Извините, но это только обходное решение; для решения см. в [Ответ Джеффа] (http://stackoverflow.com/a/20645908/2420519) этого вопроса. –