android - RemoteViewsFactory grantUriPermission 获取数据

标签 android android-permissions android-appwidget

有一个带有 Listview 的 AppWidget,我想用 RemoteViewsService.RemoteViewsFactory 填充它。

我有以下错误

E/AndroidRuntime(1203): java.lang.SecurityException: Permission Denial: reading com.crbin1.myapp.data.ProviderLTD uri content://com.crbin1.myapp.data.ProviderLTD/TB_WIDGET3P from pid=413, uid=10013 requires the provider be exported, or grantUriPermission()

如果我在 list 中导出 ProviderLTD(我的内容提供商),它会起作用,但我想避免导出它。

另一个解决方案是 grantUriPermission()。我在 list 中将 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
        }
}

最佳答案

不确定这是否仍然相关;通过设置“android:exported = true”,我发现它对我有效:

<provider android:name="WeatherDataProvider" android:exported="true">

看这个: Android Permission denial in Widget RemoteViewsFactory for Content

关于android - RemoteViewsFactory grantUriPermission 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17649544/

相关文章:

android - View.setBackground 抛出 NoSuchMethodError

java - 在 Android 上将大文件从 SD 卡复制到内部存储器

android - 请求互联网许可不起作用

java - 通过 Intent 传递对象的 ArrayList - Java (Android)

android - 利用 openGL 的多线程

java - 主机未解析 : api. twitter.com:80

android - 棉花糖权限 : Component Lifecycle

Android AppWidget onClick 在垃圾收集后无法正常工作

AndroidPlot:如何在 AppWidget 中呈现图表?

android - 仅针对一种产品 flavor 添加Android AppWidget