如何通过意图将数据从窗口小部件配置类传递到窗口小部件提供程序类?

PGMacDesign

我不会删除此问题,因为公用之处在下面提出了一些要点,但是我确实对代码进行了修改,并在此处以不同的方式提出了问题:如何在Widget Service类中检索共享的首选项数据,而不传递错误的默认值或获取空指针错误?

我正在开发一个需要用户输入选择并将其传递给小部件的应用程序。它当前正在运行一项服务来对其进行管理,并且运行良好,但是我无法弄清楚如何有效地将String从一个传递到另一个。到目前为止,这是我的代码:

        //First Widget config is called:
        public class WidgetConfig extends Activity{

            //Stuff happens here to get data from EditTexts and spinners and converts 
            //them to strings.
            //Eventually a button is pressed which enters all the information:

            public void onClick(View v) {
                //I have already tried shared preferences like this:
                //This was intended to give the shared preferences a unique identifier.
                //It does not work for what I am trying to do
                String str = Integer.toString(appWidgetId); 
                sp.putString(editor, str + "::" + "username", user_name);
                //The appWidgetID was unique and so I thought it would work as an
                //identifier for shared prefs.

                //This is the intent for opening the provider
                Intent intentUpdate = new Intent(context, MailWidgetProvider.class); 

                //I also attempted to put items here:
                intentUpdate.putExtra("username", user_name);

                //I left out the rest of the pending update code as it is irrelevant to this.
            }
        }


        //Next the AppWidgetProvider is called
        public class MailWidgetProvider extends AppWidgetProvider {

            public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
                                  int[] appWidgetIds) {

                ComponentName thisWidget = new ComponentName(context, 
                                       MailWidgetProvider.class);
                int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);

                //This is the intent to open up and run the service
                Intent intent = new Intent(context.getApplicationContext(),                            
                                            MailWidgetUpdateService.class);

                intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);

                context.startService(intent);
            }

        }

    //Service Class
    public class MailWidgetUpdateService extends Service {
        public void onStart(Intent intent, int startId) {
                AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this
                        .getApplicationContext());

                int[] allWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);

                ComponentName thisWidget = new ComponentName(getApplicationContext(),
                        MailWidgetProvider.class);

                int[] allWidgetIds2 = appWidgetManager.getAppWidgetIds(thisWidget);

                //Loop through the IDs
                for (int widgetId : allWidgetIds) {

                    int awid = widgetId;
                    String str = Integer.toString(widgetId);

                    String user_name = sp.getString(settings, str + "::" + "chosen_accout_string", "Loading...");
                    Log.d(TRACKING_USERNAME, user_name);

                    /*
                    Issue Here, see explanation below
                    */
     }
}
常用软件

如何从小部件配置类中检索小部件提供程序类中的额外内容,以及如何在收到它们后将其传递给服务?

您首先不做任何事情。

AppWidgetProvider仅仅是更新应用程序小部件内容的一种方法,一种将在添加应用程序小部件时以及在应用程序小部件元数据请求进行定期更新时由Android专门使用的一种方法。此外,请记住,您的实例AppWidgetProvider仅使用一次,然后被丢弃。

如果您想在其他地方更新您的应用程序小部件,请通过创建RemoteViews并将其赋予来更新应用程序小部件AppWidgetManagerAppWidgetProvider与它无关。引用文档

当应用程序小部件使用配置活动时,活动负责在配置完成后更新应用程序小部件。您可以通过直接从AppWidgetManager请求更新来实现。

如果您希望有一个update-the-app-widget逻辑的通用实现,请把该通用类用于您的configuration Activity,yourAppWidgetProvider以及需要更新应用程序小部件内容的任何其他类。

因此,当用户通过活动配置应用程序小部件时,您需要:

  • 通过AppWidgetManager自己更新应用程序小部件

  • 保留配置数据(在数据库,SharedPreferences或其他类型的文件中),以便可以将其用于将来的更新

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我如何堆叠窗口小部件彼此重叠的小部件

如何将数据从子窗口小部件传递到其父窗口小部件

自动将窗口小部件自动换行

在窗口小部件中将小部件封装在自己的类中?

如何将QEvents传递给子窗口小部件?

如何在kivy中通过不同的类或根窗口小部件传递变量?

将基于React / Preact的窗口小部件库集成到旧版Web应用程序中

如何从子窗口小部件类中获取父窗口小部件的名称?

从外部小部件更新提供程序类

如何通过仅输入同一个窗口小部件来将文本输入到两个文本窗口小部件中

如何将数据从一个小部件传递到其同级小部件?

如何从父窗口小部件更改一个子窗口小部件的状态,而子窗口小部件是单独文件中的单独类?

如何在类构造函数参数中动态传递窗口小部件

如何创建窗口小部件(按钮)的派生类

Python Tkinter框架窗口小部件选项(可视和类)

使用Android窗口小部件将意图从主屏幕传递到另一个Java文件

窗口小部件提供程序中的服务为空

QTest无法将事件传递给子窗口小部件

如何调用窗口小部件类框架并将其打包到主窗口应用程序类中?Tkinter

将函数传递给窗口小部件工厂窗口小部件,而不执行它

如何从自定义窗口小部件类更改中央窗口小部件?

如何从另一个对话框类访问窗口小部件类

窗口小部件依赖类Python TKinter

窗口小部件挂起的意图未更新

Rss窗口小部件:数据不可显示

在我需要窗口小部件中编译类

Android窗口小部件配置打开活动

如何通过android SearchView小部件查询提交通过意图启动新活动

将属性从类传递到其状态类并在 Text 小部件中使用它