The error happened when I call mResolver.query(Abc.CONTENT_URI, null, null, 
null, null); in onDataSetChanged().
 
Does that help?

On Saturday, August 4, 2012 11:20:51 AM UTC-4, Kostya Vasilyev wrote:

> I've run into this exact issue before. 
>
> My fix was to add Binder.clearCallingIdentity() in my RemoteViewsService 
> callbacks where I needed to access my non-exported provider.
>
> Now we're back from the launcher's identity to the identity of the app's 
> process, where access is allowed.
>
> It fit into the code structure like this:
>
>  public static class MyWidgetService extends RemoteViewsService {
> @Override
> public RemoteViewsFactory onGetViewFactory(Intent intent) {
> return new MyWidgetRemoteViewsFactory(getApplicationContext(), intent);
> }
> }
>
>  private static class MyWidgetRemoteViewsFactory implements 
> RemoteViewsService.RemoteViewsFactory {
> ...
>  @Override
> public void onDataSetChanged() {
> MyLog.i(TAG, "onDataSetChanged");
>
>  *// Revert back to our process' identity so we can work with our content 
> provider*
> *long identityToken = Binder.clearCallingIdentity();*
> try {
> // Query the message list
> Cursor listCursor = mContent.queryList(LIST_ITEM_LIMIT);
> if (listCursor != null) {
> try {
> ....
>  } finally {
> listCursor.close();
> }
>  }
> } finally {
>  *// Restore the identity - not sure if it's needed since we're going to 
> return right here, but*
> *// it just *seems* cleaner*
> *Binder.restoreCallingIdentity(identityToken);*
> }
> }
>
>
> The only place where MyWidgetRemoteViewsFactory uses the content provider 
> is its onDataSetChanged() -- contrary to proimises made by the 
> documentation, I've decided to play it safe and avoid keeping an open 
> cursor during the lifetime of the factory.
>
> If your factory keeps an open cursor outside of one method's scope, you 
> may need this trick in the other methods as well.
>
> -- K
>
>  
>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to