Android之阿里云推送实现

2023-10-31

一:效果图

 

二:实现步骤 

去阿里云官方注册账号及随便认证一下,然后去控制台创建自己的应用,控制台——>产品与服务——>移动服务——>移动推送、

  1. 创建自己的项目(新建产品)、
  2. 新建成功后点击图标进入应用管理、
  3. 点击加号进行应用配置,输入软件名及项目包名、
  4. 点创建应用一直点下一步,完成后得到AppKey和AppSecret、
  5. 去下载jar文件和so文件,具体自己去找,我这需要的是三个jar一个v7的so文件,记得引用jar文件、
    alicloud-android-push-sdk-3.0.12.jar
    alicloud-android-ut-5.1.0.jar
    utdid4all-1.1.5.3_proguard.jar
  6. 去build.gradle下配置,引用so文件及libs、
sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
    }
}

 

implementation fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})

 

  1. 在AndroidManifest文件中设置appKey,appSecret、
  <!-- 请填写你自己的- appKey 阿里云推送-->

      <meta-data android:name="com.alibaba.app.appkey" android:value="*******" />

      <!-- 请填写你自己的appSecret 阿里云推送-->

     <meta-data android:name="com.alibaba.app.appsecret" android:value="******" />

 

  1. 添加相关推送权限、
<!-- 阿里云推送相关权限 -->
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.REORDER_TASKS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
  • SDK相关组件注册
    <!-- Push SDK 相关组件,required-->
    <!-- 消息接收服务 -->
    <service
        android:name="com.alibaba.sdk.android.push.MsgService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.alibaba.sdk.android.push.NOTIFY_ACTION" />
        </intent-filter>
    </service>
    <service android:name="com.alibaba.sdk.android.push.channel.CheckService"
        android:process=":channel">
        <intent-filter>
            <action android:name="com.alibaba.sdk.android.push.CHECK_SERVICE" />
        </intent-filter>
    </service>
    <service android:name="com.taobao.accs.ChannelService"
        android:exported="true" android:process=":channel">
        <intent-filter>
            <action android:name="com.taobao.accs.intent.action.SERVICE"/>
        </intent-filter>
    </service>
    <service
        android:name="com.taobao.accs.ChannelService$KernelService"
        android:exported="false"
        android:process=":channel" >
    </service>
    <service android:name="com.taobao.accs.data.MsgDistributeService"
        android:exported="true">
        <intent-filter>
            <action android:name="com.taobao.accs.intent.action.RECEIVE" />
        </intent-filter>
    </service>
    <receiver android:name="com.taobao.accs.EventReceiver"
        android:process=":channel">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_REMOVED"/>
            <data android:scheme="package"/>
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.USER_PRESENT"/>
        </intent-filter>
    </receiver>
    <receiver android:name="com.taobao.accs.ServiceReceiver"
        android:process=":channel">
        <intent-filter>
            <action android:name="com.taobao.accs.intent.action.COMMAND"/>
        </intent-filter>
        <intent-filter>
            <action android:name="com.taobao.accs.intent.action.START_FROM_AGOO"/>
        </intent-filter>
    </receiver>
    <service android:name="org.android.agoo.accs.AgooService"
        android:exported="true" >
        <intent-filter>
            <action android:name="com.taobao.accs.intent.action.RECEIVE" />
        </intent-filter>
    </service>
    <service android:name="com.alibaba.sdk.android.push.AliyunPushIntentService"
        android:exported="true"
        >
        <intent-filter>
            <action android:name="org.agoo.android.intent.action.RECEIVE" />
        </intent-filter>
    </service>
    <receiver
        android:name="com.taobao.agoo.AgooCommondReceiver"
        android:process=":channel"
        android:exported="true" >
        <intent-filter>
            <action android:name="${applicationId}.intent.action.COMMAND" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_REMOVED" />
            <data android:scheme="package" />
        </intent-filter>
    </receiver>
    <service
        android:name="com.alibaba.sdk.android.push.channel.TaobaoRecvService"
        android:exported="true"
        android:process=":channel">
        <intent-filter>
            <action android:name="org.android.agoo.client.MessageReceiverService" />
        </intent-filter>
    </service>
    <!-- V3.0.12及以上版本需配置 -->
    <service
        android:name="com.taobao.accs.internal.AccsJobService"
        android:permission="android.permission.BIND_JOB_SERVICE"
        android:process=":channel"/>
    <!-- V3.0.7及以上版本需配置 -->
    <service android:name="com.alibaba.sdk.android.push.channel.KeepChannelService"
        android:permission="android.permission.BIND_JOB_SERVICE"
        android:process=":channel" />
    <receiver android:name="com.alibaba.sdk.android.push.SystemEventReceiver"
        android:process=":channel">
        <intent-filter>
            <action android:name="android.intent.action.MEDIA_MOUNTED"/>
            <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
            <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
        </intent-filter>
    </receiver>
    <!-- V3.0.9及以上版本需配置 -->
    <activity
        android:name="com.alibaba.sdk.android.push.keeplive.PushExtActivity"
        android:configChanges="keyboardHidden|orientation|screenSize|navigation|keyboard"
        android:excludeFromRecents="true"
        android:exported="false"
        android:finishOnTaskLaunch="false"
        android:launchMode="singleInstance"
        android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
        android:process=":channel"
        >
    </activity>
  • 自定义消息监听器
    
    /**
     * 作   者 : 浪哥
     * 功   能 : 消息接收监听器
     * 所属模块 :阿里云推送
     * 创建时间 : 2018/10/10
     * 功能描述 : 自定义消息接收器便于做消息处理
     */
    public class CgMessageReceiver extends MessageReceiver{
        // 消息接收部分的LOG_TAG、
        public static final String REC_TAG = "Langge";
        /**
         * 处理推送通知
         *
         * @param context
         * @param title
         * @param summary
         * @param extraMap
         */
        @Override
        public void onNotification(Context context, String title, String summary, Map<String, String> extraMap) {
            // TODO 处理推送通知
            Log.e(REC_TAG, "Receive notification, title: " + title + ", summary: " + summary + ", extraMap: " + extraMap);
            if ( null != extraMap ) {
                for (Map.Entry<String, String> entry : extraMap.entrySet()) {
                    Log.i(REC_TAG,"@Get diy param : Key=" + entry.getKey() + " , Value=" + entry.getValue());
                }
            } else {
                Log.i(REC_TAG,"@收到通知 && 自定义消息为空");
            }
        }
        /**
         * 推送消息的回调方法
         *
         * @param context
         * @param cPushMessage
         */
        @Override
        public void onMessage(Context context, CPushMessage cPushMessage) {
            Log.e(REC_TAG, "onMessage, messageId: " + cPushMessage.getMessageId() + ", title: " + cPushMessage.getTitle() + ", content:" + cPushMessage.getContent());
        }
    
        /**
         * 从通知栏打开通知的扩展处理
         *
         * @param context
         * @param title
         * @param summary
         * @param extraMap
         */
        @Override
        public void onNotificationOpened(Context context, String title, String summary, String extraMap) {
            Log.e(REC_TAG, "onNotificationOpened, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap);
        }
    
        /**
         * 无动作通知点击回调。当在后台或阿里云控制台指定的通知动作为无逻辑跳转时,通知点击回调为onNotificationClickedWithNoAction而不是onNotificationOpened
         *
         * @param context
         * @param title
         * @param summary
         * @param extraMap
         */
        @Override
        protected void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap) {
            Log.e(REC_TAG, "onNotificationClickedWithNoAction, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap);
        }
    
        /**
         * 应用处于前台时通知到达回调。注意:该方法仅对自定义样式通知有效,相关详情请参考https://help.aliyun.com/document_detail/30066.html#h3-3-4-basiccustompushnotification-api
         *
         * @param context
         * @param title
         * @param summary
         * @param extraMap
         * @param openType
         * @param openActivity
         * @param openUrl
         */
        @Override
        protected void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl) {
            Log.e(REC_TAG, "onNotificationReceivedInApp, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap + ", openType:" + openType + ", openActivity:" + openActivity + ", openUrl:" + openUrl);
        }
    
        /**
         * 通知删除回调
         *
         * @param context
         * @param messageId
         */
        @Override
        protected void onNotificationRemoved(Context context, String messageId) {
            Log.e(REC_TAG, "onNotificationRemoved");
        }
  • 注册自定义的消息监听器
    
    <!-- 消息接收监听器 (用户可自主扩展) -->
    <receiver
        android:name=".MyMessageReceiver"
        android:exported="false"> <!-- 为保证receiver安全,建议设置不可导出,如需对其他应用开放可通过android:permission进行限制 -->
        <intent-filter>
            <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" />
        </intent-filter>
        <intent-filter>
            <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" />
        </intent-filter>
        <intent-filter>
            <action android:name="com.alibaba.sdk.android.push.RECEIVE" />
        </intent-filter>
    </receiver>
  • 自定义Application初始化通道,不能在activity中初始化
    
    /**
     * 作   者 : 浪哥
     * 功   能 : 自定义Application
     * 所属模块 :阿里云推送
     * 创建时间 : 2018/10/10
     * 功能描述 : 自定义Application初始化通道等操作
     */
    public class MainApplication extends Application{
        private static final String TAG = "langge";
        @Override
        public void onCreate() {
            super.onCreate();
            initCloudChannel(this);
        }
        /**
         * 初始化云推送通道
         *
         * @param applicationContext
         */
        private void initCloudChannel(Context applicationContext) {
            PushServiceFactory.init(applicationContext);
            CloudPushService pushService = PushServiceFactory.getCloudPushService();
            pushService.register(applicationContext, new CommonCallback() {
                @Override
                public void onSuccess(String response) {
                    Log.d(TAG, "init cloudchannel success");
                }
    
                @Override
                public void onFailed(String errorCode, String errorMessage) {
                    Log.d(TAG, "init cloudchannel failed -- errorcode:" + errorCode + " -- errorMessage:" + errorMessage);
                }
            });
        }
    }
  •       绑定账号和别名
    PushServiceFactory.getCloudPushService().bindAccount(jsondata.getString("userId"), new CommonCallback() {//绑定账号--->用户ID
        @Override
        public void onSuccess(String s) {
            Log.d(TAG, "阿里推送绑定账号成功" + s + "   ");
        }
    
        @Override
        public void onFailed(String s, String s1) {
            Log.d(TAG, "阿里推送绑定账号失败   " + s + "     " + s1);
        }
    });
    PushServiceFactory.getCloudPushService().addAlias(departmentId, new CommonCallback() {//绑定别名--->组织ID
        @Override
        public void onSuccess(String s) {
            Log.d(TAG, "阿里推送绑定组织ID成功" + s + "  ID为: "+departmentId);
        }
    
        @Override
        public void onFailed(String s, String s1) {
            Log.d(TAG, "阿里推送绑定组织ID失败   " + s + "     " + s1);
        }
    });

 

//解绑
PushServiceFactory.getCloudPushService().bindAccount(SpUtil.get(ConstantUtil.ID, ""), new CommonCallback() {//绑定账号--->用户ID
                                @Override
                                public void onSuccess(String s) {
                                    Log.d(TAG, "阿里推送绑定账号成功" + s + "   ");
                                }

                                @Override
                                public void onFailed(String s, String s1) {
                                    Log.d(TAG, "阿里推送绑定账号失败   " + s + "     " + s1);
                                }
                            });
                            PushServiceFactory.getCloudPushService().removeAlias(SpUtil.get(ConstantUtil.ZZID, ""), new CommonCallback() {//解绑别名--->组织ID
                                @Override
                                public void onSuccess(String s) {
                                    Log.d(TAG, "阿里推送解绑组织ID成功" + s + "  ID为: " + SpUtil.get(ConstantUtil.ZZID, ""));
                                }

                                @Override
                                public void onFailed(String s, String s1) {
                                    Log.d(TAG, "阿里推送解绑组织ID失败   " + s + "     " + s1);
                                }
                            });

 

----------------- 完事,感谢阅读,写得不好不接受反驳、

-----------------demo地址:https://download.csdn.net/download/android_cll/10710614

        

 

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android之阿里云推送实现 的相关文章

  • 所有任务完成后继续任务

    在某些类中 我想使用 Task 异步加载 2 个集合并停止 busyindicator 我尝试这样的事情 var uiScheduler TaskScheduler FromCurrentSynchronizationContext Wai
  • Android 客户端中经过身份验证的 Cloud Endpoint 间歇性失败

    我有一个生产中的应用程序 在调用经过身份验证的云端点时收到大量强制 关闭 最能说明问题的是 java lang IllegalArgumentException 服务未注册 com google android gms internal e
  • 获取带有注释的所有类并将它们添加到 android 中的 hashMap

    我不确定这是否可能 但我基本上希望能够轻松地将新项目添加到列表中 只需添加带有特殊注释的类即可 我能想到的唯一例子就是我目前正在做的事情 用户可以完成很多 挑战 目前我的应用程序中有一个用于 挑战 的包 我希望能够在该包中创建一个新类 给它
  • 一项活动中有多个 YouTube 玩家

    我正在使用 Youtube Android Player API 如下所述 https developers google com youtube android player https developers google com you
  • 如何在onSaveInstanceState中使用变量[重复]

    这个问题在这里已经有答案了 我刚刚开始在 android 上学习编程 并且在使用变量时遇到问题onSaveInstanceState 这是我的代码 int resultCode Override public void onCreate B
  • AppCompatActivity 中的 setListAdapter

    我有一个具有功能的程序listArray with extends AppCompatActivity但我的代码有错误 my code 新闻活动 public class NewsActivity extends AppCompatActi
  • Mac OS Flutter 构建应用程序包失败:密钥库格式无效

    自从一周以来 我一直在尝试从 flutter 应用程序创建 android 应用程序包 并且我一直遵循创建上传密钥库 https flutter dev docs deployment android给定 flutter 官方网站 在 Ma
  • 如何更改android上的hosts文件[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我已经成功root了我的三星Galaxy Mini android 2 2 1 并认为我可以改变任何东西 就像root通常可以的那样 我想更改 And
  • 如何将内部类的值返回到外部类?

    我想做的是当onSuccess方法执行后 queryLogin return true 而如果onFailuer方法执行后 queryLogin return false 但如您所知 在 java 中 我无法从内部类修改外部类值 所以我只是
  • 启动时启动服务但不进行任何活动

    我想创建一个仅包含服务 无活动 的应用程序 该服务必须在启动时启动 我的问题是 如果没有活动 启动接收器似乎不会调用 我用下面的例子进行了测试 我有不同的文件 MyReceiver java package com test teststa
  • 所选设备不兼容 - Android Studio

    我之前已经解决了这个问题 但现在不能 我需要永久修复 在测试我的应用程序时 Android Studio 中的一切都很顺利 我现在遇到了 所选设备不兼容 的问题 当我去运行应用程序时 我想知道如何阻止它读取我手机的 API 作为 1 而不是
  • 服务中的膨胀视图显示视图,但不显示布局内的 ImageView

    我已经成功地在服务中扩展了我的布局 但是它没有显示ImageView在 的里面Inflated Layout我不知道为什么 我设置了一个onClickListener在图像视图上 它工作得很好 当我单击绿色方块时记录并停止服务 唯一的问题是
  • 为什么桌面 AES 文件 IO 与 Android AES 文件 IO 不兼容?

    我已将一个应用程序从 Android 移植到桌面 该应用程序使用 AES 加密一些私人数据 两个应用程序都能够加密和解密数据以供自己使用 但无法解密其他应用程序的数据 AES 密钥 IV 和算法是相同的 这两个应用程序之间的主要区别在于 a
  • 从MySQL php中的特定列获取最大ID和最小ID

    我是新来的php现在尝试从中检索数据MySQL到安卓 这是我的工作细节 table In 检索总小时数函数 我想检索最短 ID 时间 and 最大 ID 超时 from MySQL到安卓通过php最后使用下面的代码来获取总小时数 假设 ID
  • 渲染脚本渲染在Android上比OpenGL渲染慢很多

    背景 我想根据Android相机应用程序的代码添加实时滤镜 但Android相机应用程序的架构是基于OpenGL ES 1 x 我需要使用着色器来自定义我们的过滤器实现 然而 将相机应用程序更新到OpenGL ES 2 0太困难了 然后我必
  • 使用 Android 将文本文件上传到 Google Drive

    编辑 我已将文本设置为字符串 如下所示 字符串文本 你好 我想将其转换为纯文本文件 然后上传到 Google 云端硬盘文件夹 我已经尝试过下面的代码 但它不完整 所以我无法说出出现了什么错误 我正在使用 Google Drive 快速启动
  • Android EditText:在触摸时选择所有文本,并在用户开始输入时清除。

    我的应用程序中有一个编辑文本 当用户触摸编辑文本时 应选择整个文本 而当他开始输入文本时 应清除文本 一个例子是浏览器地址栏 有什么办法可以做到这一点吗 请帮助我 您可以使用以下方法选择 EditText 中的所有文本 android se
  • gradle 构建工具版本从 1.2.3 升级到 1.3.1 的问题

    我已将 gradle 构建工具从 1 2 3 升级到 1 3 1 并开始在 gradle 同步上看到以下错误 我使用 1 2 3 版本没有任何问题 我使用的是 gradleVersion 2 3 无论如何我可以避免这个错误吗 错误 您的项目
  • Android - 具有自定义视图的 android.view.InflateException

    嗨 我不断收到此错误 它是第 9 行的 android view InflateException xml 这是我的 xml
  • 如何跟踪用户在我的 Android 应用程序上花费了多少时间?

    我想跟踪用户在我的 Android 应用程序上花费了多少时间 当用户在应用程序上处于活动状态时 我可以获取以小时为单位的时间吗 它会自动跟踪 Note 应用程序不在 Google Play 上 此代码将帮助您获取应用程序使用时间 long

随机推荐

  • Unity3d trial version 水印

    使用个人免费版发布安卓手机版包 屏幕右下角显示 trial version 水印 解决办法 1 免费版Unity Hub 使用国外网络刷新证书 2 使用付费版Unity Hub
  • 美团笔试-回转寿司

    小美请小团吃回转寿司 转盘上有N盘寿司围成一圈 第1盘与第2盘相邻 第2盘与第3盘相邻 第N 1盘与第N盘相邻 第N盘与第1盘相邻 小团认为第i盘寿司的美味值为A i 可能是负值 如果小团讨厌这盘寿司 现在 小团要在转盘上选出连续的若干盘寿
  • Qt网络编程之实例一GET方式

    看了两天的Qt网络编程 其实主要就是看了看QNetworkAccessManager QNetworkRequest和QNetworkReply这三个类的主要内容 在之前 Qt网络编程主要是使用QHttp等类 但是现在在帮助手册中这些类已经
  • 2022年2月6日--2月12日(ue智慧城市3,4周,本周10小时,合计1929小时,剩余8071小时)

    目前 ue视频教程进行到了智 慧 城 市 3 11 mysql 7 1 tf1 4 11 蓝图反射 1 9 moba 1 5 webapp 2 4 mmoarpg 00A 04 socket 2 57 Opengl 5 9 GLSL 2 1
  • 汇编ret ,retf ,iret ,int指令详解

    ret指令 执行过程 ret指令用栈中的数据 修改IP的值 从而实现近转移 CPU执行ret指令时 进行下面两步操作 IP SS 16 SP SP SP 2 另一种用法 ret n n为整数 等效于 IP SS 16 SP SP SP 2
  • mysql索引的使用和讲解

    索引概述 索引是一个数据结构 索引是帮助 MySQL 高效获取数据的数据结构 有序 在数据之外 数据库系统还维护着满足特定查找算法的数据结构 这些数据结构以某种方式引用 指向 数据 这样就可以在这些数据结构上实现高级查询算法 这种数据结构就
  • 大数据毕设项目 基于python 爬虫 flask的疫情数据可视化系统

    文章目录 1 课题背景 2 实现效果 2 1 整体界面展示 2 2 31省病例柱形图 2 3 全国现有确诊人数趋势 2 4 中国累计确诊时间线 2 5 中国疫情情况饼状图 2 6 高风险树状图 3 相关理论及技术 3 1爬虫 3 2 Dja
  • 谷粒商城微服务分布式高级篇ElasticSearch五——商城业务-商品上架

    文章目录 商品上架 ES数据模型 上架流程 mybatis之foreach用法 TypeReference Feign调用流程 商品上架 后台管理员对spu审核进行操作 点击上架 只有当商品上架才应该被检索 即需要导入商品数据到ES中 请求
  • 神经网络是算法还是模型,神经网络 图像相似度

    神经网络的准确率是怎么计算的 其实神经网络的准确率的标准是自己定义的 我把你的例子赋予某种意义讲解 1 期望输出 1 0 0 1 每个元素代表一个属性是否存在 像着4个元素分别表示 是否肺炎 是否肝炎 是否肾炎 是否胆炎 1表示是 0表示不
  • 知乎:1.03亿月活用户,获得感战略下的内容质量和商业化布局难平衡

    点击上方蓝字关注我们 分析知乎财报 聊聊以下几点问题 知乎主要靠什么赚钱 知乎的收入来源 知乎在商业化方面做了那些探索 知乎的产品规划 玩过知乎的朋友 一定看到过以下短句 谢邀 人在美国 刚下飞机 圈内熟人太多 利益相关 匿了 在知乎回答中
  • 计算机防火墙不能更改,win7无法更改防火墙设置提示系统报错怎么办

    防火墙也称防护墙 是一种位于内部网络与外部网络之间的网络安全系统 可以防止病毒入侵 有位 Win7系统 用户想更改防火墙某些设置 出现无法更改的情况 系统报错 0x80074200 怎么办呢 下面小编告诉大家两种解决win7无法更改防火墙设
  • Qt实现单击或双击QTableWidge/View表头进行排序

    先看效果图 点击一次对应列进行降序 再点击一次进行升序 分别对应图1 图2 实现代码 构造函数中设置了一个sign以及关联对应的信号 双击表头的信号为sectionDoubleClickClicked m sign true 设置一个标志位
  • cpu中的MMU的作用

    虚拟内存与物理内存之间的映射 用户空间映射到物理内存是独立的 提高安全性 修改内存访问级别 0是最高级
  • 通过python控制GDB进行调试

    最近需要对自己开发RISC V Server调试器进行稳定性测试 所以需要通过使用自动化脚本进行测试 这里想通过Python编写脚本来控制GDB进行稳定性测试 Python中有一个库pygdbmi 代码如下 from pygdbmi gdb
  • crypto-js 前端DES加密/解密、生成秘钥 详解

    DES概述 DES全称为Data Encryption Standard 即数据加密标准 是一种使用密钥加密的块算法 1977年被美国联邦政府的国家标准局确定为联邦资料处理标准 FIPS 并授权在非密级政府通信中使用 随后该算法在国际上广泛
  • ts250服务器开启虚拟,ts250服务器恢复系统

    ts250服务器恢复系统 内容精选 换一换 数据分布问题简述分布式产生的根源是 规模 规模可理解为计算和存储的需求 当单机能力无法承载日益增长的计算存储需求时 就要寻求对系统的扩展方法 通常有两种扩展方式 提升单机能力 scale up 增
  • Python Pygame 实现宝可梦对战场面

    宝可梦游戏是小时候最喜欢的掌机游戏之一 印象最深刻的是宝可梦 黄 宝可梦 金 银 还有红蓝宝石 游戏的设计很出色 画面精致 可以说是是掌机时代的代表了 本篇文章使用Pygame实现宝可梦的战斗场景 重温经典 目录 一 游戏效果展示 二 使用
  • 基于DNN神经网络的多输入多输出数据回归预测

    基于DNN神经网络的多输入多输出数据回归预测 神经网络是一种被广泛应用于机器学习和人工智能领域的工具 它可以通过训练来学习输入和输出之间的关系 在回归预测问题中 神经网络可以通过学习历史数据来预测未来的结果 本篇文章将介绍如何使用DNN神经
  • Halcon仿射变换图片(旋转、缩放、平移)

    一 实验要求 把图片中的书摆正 二 实现代码 仅旋转 旋转变换 read image Image C Users 86159 Pictures Saved Pictures 1作业图片 5 2 1 jpg dev close window
  • Android之阿里云推送实现

    一 效果图 二 实现步骤 去阿里云官方注册账号及随便认证一下 然后去控制台创建自己的应用 控制台 gt 产品与服务 gt 移动服务 gt 移动推送 创建自己的项目 新建产品 新建成功后点击图标进入应用管理 点击加号进行应用配置 输入软件名及