2013-07-15 9 views
5

hanno un AppWidget con un controllo ListView che voglio riempire con un RemoteViewsService.RemoteViewsFactory.grantUriPermission RemoteViewsFactory per recuperare i dati

ho il seguente errore

E/AndroidRuntime (1203): java.lang.SecurityException: Permesso Denial: lettura com.crbin1.myapp.data.ProviderLTD uri contenuto: // com. crbin1.myapp.data.ProviderLTD/TB_WIDGET3P da pid = 413, uid = 10013 richiede essere esportato il provider, o grantUriPermission()

Se posso esportare ProviderLTD (il mio fornitore di contenuti) in palese funziona, ma io Preferisco evitare di esportarlo.

L'altra soluzione è grantUriPermission(). Ho impostato grantUriPermissions su true in manifest, ma ora non capisco dove nel mio codice devo concedere le autorizzazioni.

public class Widget3pService extends RemoteViewsService { 
     @Override 
     public RemoteViewsFactory onGetViewFactory(Intent intent) { 
      return new StackRemoteViewsFactory(this.getApplicationContext(), intent); 
     } 
    } 


    class StackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory { 
     private List<ObjW3Task> mWidgetItems = new ArrayList<ObjW3Task>(); 
     private Context mContext; 
     private int mAppWidgetId; 

     public StackRemoteViewsFactory(Context context, Intent intent) { 
      mContext = context; 
      mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); 
     } 

     public RemoteViews getViewAt(int position) { 
      // use mWidgetItems to populate ListView 
      // fillInIntent for listeners 
      return myRemoteViews; 
     } 

     public void onDataSetChanged() { 
      mWidgetItems = new ArrayList<ObjW3Task>(); 
      // create mWidgetItems by accessing my ContentProvider class 
     } 
} 

risposta