6

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
        }
}
4

1 に答える 1

-2

これがまだ関連しているかどうかはわかりません。「android:exported = true」を設定することで、私の場合は動作することがわかりました。

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

これを参照してください: コンテンツのウィジェット RemoteViewsFactory での Android 権限の拒否

于 2015-07-07T03:46:44.003 に答える