美文网首页
Framework 学习笔记

Framework 学习笔记

作者: 课本里的小明 | 来源:发表于2020-05-12 11:05 被阅读0次

    一.AppWidgetManager

    AppWidgetManager是在系统启动时运行的单例对象。这意味着每个启动器的每个实例都使用相同的AppWidgetManager。他们的AppWidgetHost和他们目前持有的RemoteView有什么区别。 AppWidgetManager基本上保存所有活动主机及其持有的小部件的列表。 AppWidgetHost不是一个有限的对象。也就是说,任何活动可能都有一个主机。因此,整个应用程序可能只是Widgets,如果他们这样选择。

    当您实例化主机时,您必须添加视图。所以,基本上它是一个没有强制父母限制的子视图列表,除了你的活动给它。首先,你要求一个ID(通过myHost.allocateAppWidgetId())。然后你使用你的选择小部件活动/对话框。 Dialog返回WidgetInfo。当您要求主机通过WidgetInfo和您要求的ID创建View(通过createView)时,将检索该视图。然后,它要求窗口小部件的RemoteView。

    最后,通过将活动中的“视图”作为子项来绑定小部件。这通过包含所有Widget的ViewGroup的addView()方法完成。

    首先,你必须确保你的Android清单中有这个:

    <uses-permission android:name="android.permission.BIND_APPWIDGET" />
    接下来,你必须创建一个AppWidgetHost(我为我的发射器扩展自己)。主机的关键是通过AppWidgetManager.getInstance();保持对AppWidgetManager的引用。

    AppWidgetHost myHost = new AppWidgetHost(context, SOME_NUMERICAL_CONSTANT_AS_AN_ID);
    现在,得到你的ID:

    myHost.allocateAppWidgetId()
    下一步是通过您用来获取窗口小部件信息的任何方法完成的。大多数情况下,它通过onActivityResult通过Intent返回。现在,您所需要做的就是使用appInfo并创建视图。 WidgetId通常由pick widget活动结果提供。

    AppWidgetProviderInfo withWidgetInfo
    = AppWidgetManager.getInstance().getAppWidgetInfo(forWidgetId);
    AppWidgetHostView hostView
    = myWidgetHost.createView(myContext, forWidgetId, withWidgetInfo);
    hostView.setAppWidget(forWidgetId, withWidgetInfo);
    现在你只需将View作为一个孩子绑定到你要绑定的任何东西。

    myViewGroup.addView(hostView);
    当然,你总是要考虑在哪里和如何放置它等等。另外,你必须确保你的AppWidgetHost在开始添加小部件之前正在侦听。

    myHost.startListening()

    总结一下

    Widget绑定过程跨越许多方法和步骤,但都通过AppWidgetHost发生。因为小部件是在您的命名空间之外编码的,除了放置它们的位置以及视图的大小之外,您没有任何控制权。由于最终代码运行在您的空间,而是在您的控制之外,AppWidgetManager充当中立的调解员,而AppWidgetHost代表您的应用程序的协调人。一旦了解,您的任务很简单。以上步骤是所有自定义启动器(包括我自己的)所需的步骤。

    相关文章

      网友评论

          本文标题:Framework 学习笔记

          本文链接:https://www.haomeiwen.com/subject/unavnhtx.html