RemoteViewsService.RemoteViewsFactory を設定したい Listview を持つ AppWidget があります。
次のエラーがあります
E/AndroidRuntime(1203): java.lang.SecurityException: アクセス許可の拒否: com.crbin1.myapp.data.ProviderLTD uri content://com.crbin1.myapp.data.ProviderLTD/TB_WIDGET3P を pid=413、uid=10013 から読み取りますプロバイダーをエクスポートする必要があるか、grantUriPermission()
マニフェストで ProviderLTD (私のコンテンツ プロバイダー) をエクスポートすると機能しますが、エクスポートは避けたいと思います。
もう 1 つのソリューションは、grantUriPermission() です。マニフェストで grantUriPermissions を true に設定しましたが、コードのどこでアクセス許可を付与する必要があるかわかりません。
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
}
}