首页 文章 精选 留言 我的

精选列表

搜索[知识库增强],共10000篇文章
优秀的个人博客,低调大师

增强型蓝牙 5 会让 BLE 成为物联网的最佳选择吗?

低功耗蓝牙技术 (BLE) 已是绝大多数物联网 (IoT) 的主要通信标准。数天前,蓝牙技术联盟 (SIG) 公布了蓝牙 5 的一些信息。这是蓝牙技术联盟新产品的名称。该产品计划于 2016 年底或 2017 年初推出。 声明称,新一代蓝牙技术在现有规格的基础上做了很大改进。速度、距离及数据广播性能据称都有大幅提升。接下来,我们就来看看上述方面的改进是如何升级现有应用程序,并使 BLE 比其它同类技术更胜一筹。 在 IoT 通信标准发言权的激烈竞争中,这些新优势可能有助于 BLE 取得领先地位并使其成为 IoT 的终极标准。 速度加倍意味能耗减半 在很多 IoT 应用中,速度并不是什么大问题。对于大多数不使用流媒体的应用案例而言,情况基本如此。譬如,我们可以看看像健身腕带之类的可穿戴产品。如脉搏、步数及锻炼方式等信息的数据传输量很小。当前蓝牙标准的速度足以将数据在锻炼时实时或锻炼结束后传给用户的智能手机或其它设备。传输速度提高一倍并不能明显改进用户的使用体验。 另一方面,功耗才是可穿戴产品难以逾越的一大障碍。健身腕带的续航时间才是其成败的关键。由于现在传输数据的速度翻倍,因此有效通信时间最高可降低 50%。与此同时,还能有效降低产品的功耗(最高可降低一半)。而一半的功耗意味着充电前产品的续航时间延长了一倍。现在,这一点不容小觑。 可穿戴产品数据传输的速度更快的另一优势在于其软件或固件升级更快。可穿戴产品在软件或固件升级时,其数据传输量比日常使用时更大,因此速度提升能有效降低功耗。 四倍的距离意味着用户可控制家中所有智能设备 蓝牙不仅已是可穿戴产品的必用技术之一,也广为智能家电所采用。蓝牙技术具有低功耗、传输快的优势,而且现有的消费类电子设备普遍采用蓝牙技术,这使得很多产品都对它青睐有加。但 IoT 世界不断发展变化,因此很难预测哪种技术会被广泛采用从而取代其它技术。 因此,当今市场上的许多产品都搭载了多种类似的连接技术。例如,人气极高的 Nest 智能恒温器支持三种通信标准:Wi-Fi、Zigbee 及 BLE。 蓝牙 5 的发布声明称,新标准的通信距离是原有距离的四倍。这意味着,除可享用现有 BLE 的优势外,用户还可在家中任何位置控制从灯泡到智能锁的智能家居产品。通过 Wi-Fi 控制家用设备有其主要优势,但通信距离的增加却使得更高效的BLE 让能耗极高的 Wi-Fi 相形见绌。 对于很多其它应用案例而言,通信距离的增加也是一利好消息。从遥控器、键盘鼠标套件类的简单设备到可穿戴产品,尤其是智能耳机,如果用户距离可连接的设备太远,其与设备的通信就会断开。 数据广播性能的改进意味着连接受到的干扰更少。 新标准的另一大改进是其数据广播性能在原有基础上提高了 8 倍。蓝牙技术联盟预测,这会带来用户与设备互动方式的大变革。数据广播性能的提升使类似于信标、地理定位信息及导航等“非连接”服务成为可能,因而无需使用与 BLE 相配套的设备。“非连接”服务的理念是在不安装其它应用以及不事先设置连接的条件下,接收数据并使用这些服务。 蓝牙 5 简要声明中未介绍的另一项令人期待的功能是网状网络支持。此功能其实已于 2015 年 11 月推出。如果新标准也包括此功能,那么在更多诸如资产追踪及垃圾智能管理等需使用网状网络的应用案例中,BLE 会成为更具优势的通信技术。 BLE 会淘汰其它连接技术吗? 当然,前景仍不甚明朗。不断变化发展的智能物联网世界仍处于初始阶段。很难断定明天哪种趋势和标准仍会流行,更别提未来数年后的情况了。但从其速度、功耗、距离和数据广播性能的巨大改进来看,BLE 似乎仍然势头不减。 ====================================分割线================================ 本文转自d1net(转载)

优秀的个人博客,低调大师

android webview增强版,对原生webview的一些解决方案

MWebView 根据 Tamicer/JsWebView 修改定制 为什么要使用WebView 随着app业务的不断深入发展,只靠着原生代码来堆砌功能是不现实,毕竟开发的时长会增加,而且同时需要开发iOS和Android两套,并且,如果在UI上改变了一丁点,都需要提包(虽然Android现在可以进行热更新,但是热更新不是100%能生效的,其中的原理只要了解过的人都会知道的),最终我们会选择使用原生嵌套H5的方式进行开发,这样,既可以随时更改UI,也可以无限制的进行功能扩展,然后,我们就要使用到Android的WebView了,这个让我们痛并快乐着的控件。 Android基于JsBridge封装的高效带加载进度的WebView 可用作简单应用内置浏览器,帮你快速开发Hybrid APP 主要功能: 支持header 支持进度 支持自定义错误页面 支持h5和native的快速交互,简单易学 - 支持cookie同步 UI Dependencies Gradle: root: repositories { maven { url "https://jitpack.io" } jcenter() } Module: dependencies { ..... compile 'com.tamic:browse:1.0.0' } Function **XMl** <com.rjs.mywebview.view.ProgressBarWebView android:id="@+id/login_progress_webview" style="@style/NumberProgressBar_Default" android:layout_width="match_parent" android:layout_height="match_parent" /> 建议:代码中动态生成(防止重复打开导致的内容泄露) “`java mProgressBarWebView = new ProgressBarWebView(MainActivity.this); root_layout.addView(mProgressBarWebView); **初始化** **XMl** ProgressBarWebView mProgressBarWebView = (ProgressBarWebView) findViewById(R.id.login_progress_webview); **设置WebViewClient** mProgressBarWebView.setWebViewClient(new CustomWebViewClient(mProgressBarWebView.getWebView()) { @Override public String onPageError(String url) { //指定网络加载失败时的错误页面 return "file:///android_asset/error.html"; } @Override public Map<String, String> onPageHeaders(String url) { // 可以加入header return null; } }); // 打开页面,也可以支持网络url mProgressBarWebView.loadUrl("file:///android_asset/demo.html"); **回调js的方法** // 添加hander方法名 mHandlers.add("login"); // 订阅此方法key mProgressBarWebView.registerHandlers(mHandlers, new JsHandler() { @Override public void OnHandler(String handlerName, String responseData, CallBackFunction function) { String resquestData = "this native data" // 返回数据给js function.onCallBack(resquestData); } }); **调用js** mProgressBarWebView.callHandler("callNative", "hello H5, 我是java", new JavaCallHandler() { @Override public void OnHandler(String handlerName, String jsResponseData) { Toast.makeText(MainActivity.this, "h5返回的数据:" + jsResponseData, Toast.LENGTH_SHORT).show(); } }); **发送消息给js** mProgressBarWebView.send("hello world!", new CallBackFunction() { @Override public void onCallBack(String data) { // data 为js回传数据 Toast.makeText(MainActivity.this, data, Toast.LENGTH_SHORT).show(); } }); **属性配置** ```java webView.loadUrl("www.baidu.com");//WebView加载的网页使用loadUrl WebSettings webSettings = webView.getSettings();//获得WebView的设置 webSettings.setUseWideViewPort(true);// 设置此属性,可任意比例缩放 webSettings.setLoadWithOverviewMode(true);//适配 webSettings.setJavaScriptEnabled(true); //支持js webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); //设置 缓存模式 webSettings.setDomStorageEnabled(true);// 开启 DOM storage API 功能 webSettings.setDatabaseEnabled(true);//开启 database storage API 功能 webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);//HTTPS,注意这个是在LOLLIPOP以上才调用的 webSettings.setAppCacheEnabled(true);//开启 Application Caches 功能 webSettings.setBlockNetworkImage(true);//关闭加载网络图片,在一开始加载的时候可以设置为true,当加载完网页的时候再设置为false <div class="se-preview-section-delimiter"></div> WebChromeClient和WebViewClient webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { //加载的进度 } @Override public void onReceivedTitle(WebView view, String title) { //获取WebView的标题 } @Override public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { return super.onJsAlert(view, url, message, result); //Js 弹框 } @Override public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { AlertDialog.Builder b = new AlertDialog.Builder(IllegalQueryActivity.this); b.setTitle("删除"); b.setMessage(message); b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.confirm(); } }); b.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.cancel(); } }); b.create().show(); return true; } }); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //需要设置在当前WebView中显示网页,才不会跳到默认的浏览器进行显示 return true; } @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { super.onReceivedError(view, request, error); //加载出错了 } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); //加载完成 } }); webView.setDownloadListener(new DownLoadListener());//下载监听 private class DownLoadListener implements DownloadListener { @Override public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { } } <div class="se-preview-section-delimiter"></div> 然后就是WebView跟JS的交互了 webView.addJavascriptInterface(new WebAppInterface(this), "WebJs"); public class WebAppInterface { Context mContext; public WebAppInterface(Context c) { mContext = c; } @JavascriptInterface public void method() { } } webView.loadUrl("javascript:jsMethod()");//这是WebView最简单的调用JS的方法 <div class="se-preview-section-delimiter"></div> 当activity执行生命周期的时候,这里需要注意的是在onDestroy的时候,需要销毁WebView,不然也会出现内存泄漏的 @Overrideprotected void onPause() { super.onPause(); if (webView != null) { webView.onPause(); } } @Override protected void onResume() { super.onResume(); if (webView != null) { webView.onResume(); } } @Override protected void onDestroy() { if (webView != null) { webView.clearCache(true); //清空缓存 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { if (webViewLayout != null) { webViewLayout.removeView(webView); } webView.removeAllViews(); webView.destroy(); }else { webView.removeAllViews(); webView.destroy(); if (webViewLayout != null) { webViewLayout.removeView(webView); } } webView = null; } } 可以看到上面的onDestroy方法中对系统的版本进行了判断,那是因为我在不同的版本中进行了测试,如果低于5.0版本的WebView中,如果先在parent中remove了WebView,那WebView将无法进行destroy了,这样就会造成内存的泄漏,下来你们可以自己去尝试一下这个说法是不是正确的。 现在还遇到的一个问题就是,当WebView嵌套在ScrollView中时,某些机型会出现闪屏的问题,单独WebView的时候是不会出现的,把硬件加速关闭了之后,对用户的体验又不好,所以暂时还未想到比较好的解决方案,所以还是建议不要在ScrollView中嵌套WebView这样的控件。 现在还遇到的一个问题就是,当WebView嵌套在ScrollView中时,某些机型会出现闪屏的问题,单独WebView的时候是不会出现的,把硬件加速关闭了之后,对用户的体验又不好,所以暂时还未想到比较好的解决方案,所以还是建议不要在ScrollView中嵌套WebView这样的控件。 项目地址(欢迎fork):https://github.com/BrillantZhao/MWebView

优秀的个人博客,低调大师

企业 GEO 落地架构与合规路径:团标下的知识库三区分治设计

2026 年 7 月 1 日,国内首部 GEO 行业团体标准《商贸流通业生成式引擎优化(GEO)智能营销技术服务规范》(T/CGCC 119-2026)正式实施。到 9 月中旬,标准落地已超过两个月。8 月 11 日,新华网融媒体未来研究院牵头发布 T/CAPT 026-2026《生成式引擎优化(GEO)可信信息传播与信息生态治理规范》,30 余家机构参与起草。

优秀的个人博客,低调大师

企业级 AI 助手开源软件:乾坤AI助手的多模型接入与 RAG 知识库架构

企业落地大模型时,难点通常不在于完成一次模型调用,而在于如何把模型供应商、业务资料、权限体系和运维配置放到统一的工程边界内。模型接口各不相同,密钥与参数容易分散维护;制度文档、产品资料和实施手册虽已存在,却难以成为可检索、可追溯的对话知识来源。乾坤AI助手将模型接入置于管理端配置体系中,可对模型名称、参数和 API Key 进行可视化维护,并通过 LangChain4j 承担模型与检索链路的统一抽象。系统覆盖 DeepSeek、通义千问、文心一言、豆包、智谱、星火、OpenAI、Gemini、Ollama、Azure、Claude 等模型 Provider,实际启用范围由部署侧配置决定。这种设计将业务功能与具体模型服务解耦。对应用层而言,模型能力经由统一接口进入知识问答或业务助手流程;对运维侧而言,模型切换与参数调整可以在后台集中处理,避免在多个业务模块中重复修改调用逻辑。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册