uniapp实现桌面小部件功能(安卓)开发日志 您所在的位置:网站首页 keep桌面小部件 uniapp实现桌面小部件功能(安卓)开发日志

uniapp实现桌面小部件功能(安卓)开发日志

2024-07-05 17:13| 来源: 网络整理| 查看: 265

独立开发一开始选择了uniapp ,但是遇到了这样的需求,就是桌面小部件功能。这个功能我一开始觉得没啥作用,自己用了一下感觉还是挺不错的。所以也想实现一下。但是网上的教程少之又少。基本上翻遍了都没有一个手把手实现的。只能靠自己摸索了。对于没有接触过安卓原生开发的人来说真的很不友好。

研究了一段时间,有两种方式实现桌面小部件 1.是用uniapp的uts语言。 2.就是使用安卓原生插件。 第一种方式虽然方便但是每次调试都打自定义基座感觉太费时间。 第二种方式就是引入安卓的aar插件 这样的话就可以小部件和uniapp分开进行设计了。

设计思路: 1.先按照uniapp Android原生插件开发和离线打包调试的步骤制作aar包 2.安卓studio上创建桌面小部件,然后生成aar文件 3.uniapp导入上面的aar插件然后打自定义调试基座 即可实现简单的小部件 4.实现数据交互 监听事件,然后小部件使用SharedPreferences保存数据。uniapp通过 @UniJSMethod调用插件中的方法来获取SharedPreferences保存的数据然后返回给uniapp内部。uniapp给小部件传数据也是调用安卓插件的方法传json然后进行解析。 5.实现点击小部件打开app功能目前使用Intent的方式。 6.因为小部件和uniapp的数据是分开的,还需要进行数据同步,进入uniapp页面会触发同步。

问题记录: 1.当前运行的基座不包含原生插件[xxx],请在manifest中配置该插件,重新制作包括该原生插件的自定义运行基座.检查aar插件的package.json中的class路径是否正确。这个容易出错。

疑问: 1.数据同步这块感觉还是比较麻烦,和原生开发比起来多了一步数据同步,要是能省去这一步就方便了。 2.如何在uniapp中直接唤起桌面小部件,目前还没实现。 3.uniapp的ios桌面小部件怎么做。这个还需要研究一下。

目前做了一个demo走了一下流程是ok的,本文粗略介绍了一下思路,并做一下笔记。后续会补充详细的代码。因为没有教程,uniapp桌面小部件这块折腾了好久。希望能帮助到需要的人,欢迎交流~

2024-06-24日志 实现了一下点击桌面小组件打开本app的功能。这块走了不少弯路使用了。一开始使用小组件跳转到目标活动类然后触发跳转app反正是不行,具体原因也不得而知。后来在小部件的onUpdate事件中加入跳转就可以了。嘿嘿。代码如下:

// 创建用于启动活动的PendingIntent(如果需要的话,应该指向一个具体的Activity) Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, launchIntent, PendingIntent.FLAG_IMMUTABLE); views.setOnClickPendingIntent(R.id.jump_to_app_button, pendingIntent);

接下来实现uniapp内添加小部件功能,应该也简单。

2024-06-25日志 人麻了 对于没接触过安卓原生开发的人 真的是上强度看着简单的功能足足用了我5个小时才搞定。 实现uniapp内添加小部件功能。主要就是没有那么全面的教程,只能摸着石头过河。 安卓原生内部弹框添加桌面小部件只需要下面代码即可实现

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { AppWidgetManager mAppWidgetManager = context.getSystemService(AppWidgetManager.class); ComponentName myProvider = new ComponentName(context, MyWidgetProvider.class); Bundle b = new Bundle(); b.putString("嘿嘿嘿", "嘿嘿嘿"); if (mAppWidgetManager.isRequestPinAppWidgetSupported()) { Intent pinnedWidgetCallbackIntent = new Intent(context,MyWidgetProvider.class); PendingIntent successCallback = PendingIntent.getBroadcast(context, 0, pinnedWidgetCallbackIntent, 0); mAppWidgetManager.requestPinAppWidget(myProvider, b, successCallback); } }

下一步计划做一个完整的小部件。实现闭环。基本上核心的问题都解决了。uniapp开发安卓小部件也不是问题了。

2024-07-03日志 实现RemoteViewsService以及同一个类型的多个小部件展现不同内容。 需要定义一个private Map widgetIdToDataListMap = new HashMap(); RemoteViewsService每次都传入appWidgetId 根据appWidgetId来更新对应的小部件的数据。

public MyRemoteViewsFactory(Context context, int appWidgetId) { this.appWidgetId = appWidgetId; this.context = context; }

2024-07-04日志 实现小组件的命名 在AndroidManifest.xml中注册小组件:然后,在你的AndroidManifest.xml文件中,通过标签注册你的AppWidgetProvider,并使用标签来指定小组件的配置信息,包括它的名称。

注意:上面的标签中的android:label属性设置了小组件在设备上的默认名称。但是,请注意,这个android:label属性实际上并不总是直接显示在小组件上;它更多地是用于在添加小组件时的列表或设置中标识小组件。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有