宝塔山 发表于 2024-8-3 23:45:03

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

独立开发一开始选择了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.当前运行的基座不包含原生插件,请在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<Integer, List> 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,并使用标签来指定小组件的配置信息,包括它的名称。
<receiver android:name=".ExampleAppWidgetProvider"
    android:label="@string/appwidget_name"> <!-- 这里设置小组件的名称 -->
    <intent-filter>
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>

    <!-- App Widget metadata -->
    <meta-data
      android:name="android.appwidget.provider"
      android:resource="@xml/example_appwidget_info" />
</receiver>
注意:上面的标签中的android:label属性设置了小组件在设备上的默认名称。但是,请注意,这个android:label属性现实上并不总是直接表现在小组件上;它更多地是用于在添加小组件时的列表或设置中标识小组件。
2024-07-08日志 实现点击桌面小部件 然后跳转uniapp指定页面的功能
因为是混合开发 以是不能向安卓原生那样直接跳转页面。只能是跳转至uniapp内部然后根据传参再进行跳转。app.vue文件的onshow()中调用原生插件中的方法检查传参。因为页面只跳转一次,以是在跳转之后清除原生插件中所生存的参数。
                onShow: function() {
                        testMoudel.initScan((ret) => {
                                uni.showToast({
                                        title: ret,
                                        icon: 'none',
                                        duration: 2000
                                });
                                if (ret) {
                                        uni.setStorageSync('RedirectPath', ret);
                                        //同时清除记录
                                        testMoudel.clear_pass()
                                }
                        })
                },
然后在首页中加入一个循环事件。判断RedirectPath是否有参数,有的话根据参数进行页面跳转即可。当应用未启动时,可以在首页beforeMount方法中也加入跳转。
2024-07-09日志 创建小部件后设置小部件详细参数的功能 用于不同小部件表现不同内容
1.创建ExampleAppWidgetConfigure类
2.在AndroidManifest.xml中注册Activity
3.小部件appwidget-provider 文件中配置android:configure=“com.example.Scanqrmodule.ExampleAppWidgetConfigure”
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:configure="com.example.Scanqrmodule.ExampleAppWidgetConfigure"
    android:initialKeyguardLayout="@layout/my_remote_widget"
    android:initialLayout="@layout/my_remote_widget"
    android:minHeight="100dp"
    android:minWidth="150dp"
    android:previewImage="@drawable/mubiao"
    android:resizeMode="horizontal|vertical"
    android:updatePeriodMillis="86400000"
    android:widgetCategory="home_screen|keyguard">
</appwidget-provider>

基本上想实现的功能都实现了,后续会把完整的demo上传至gitee中

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: uniapp实现桌面小部件功能(安卓)开发日志