关于android:HMS-Core-Discovery第16期回顾与虎墩一起玩转AI新声态

HMS Core 在AI畛域最新的技术能力有哪些?本期Discovery直播以《与虎墩一起,玩转AI新“声”态》为主题,邀请了HMS Core 机器学习服务产品经理、机器翻译高级专家以及HMS Core的新敌人“虎墩”,为大家展现机器学习的语音语言翻新技术,分享机器学习与人工智能的宏观发展趋势。一起回顾一下本期精彩内容! 【精彩回顾】 1、抖音网红IP“虎墩小镖师”强势来袭 2、同声传译新亮相,底层技术大揭秘 3、AI翻译能力降级,语种裁减可播报 【专家观点】 Nicolas,华为2012实验室文本机器翻译高级专家 机器翻译临时无奈代替人类。目前需要不高的翻译需要能够依赖机器但要求较高的翻译需要还须要人工染指,人工能够做到点到面的全方位品质把控,比方谈话纯粹与否、语言通顺与否,还能够奉献数据和常识,晋升机器翻译品质。 Hardy,HMS Core ML Kit 资深产品经理 AI是智能机器的狭义畛域,而机器学习是AI的外围利用之一。它指的是任何可能自行“学习”的计算机应用程序或程序,而无需人类的明确规定。将来机器学习技术将会更重视情感体验,向多模态(语音、文字、视觉)、多技术(VR/AR等)、多平台多零碎协同态势的方向倒退。 【精彩答疑】 Q1:什么是TTS音色定制?TTS音色定制与虎墩在碰撞一起会有什么新玩法? A:依靠华为的数据积攒和成熟算法,TTS音色定制在语音合成技术的加持下,只须要提供大量的洁净录音数据,就能够进行模型训练,失去高还原度、高清晰度、高稳定性的专属音库,助于晋升产品特色、疾速打造个性化的品牌特色。ML Kit的新能力TTS与 IP“虎墩小镖师”正在单干中,TTS通过机器训练还原虎墩的音色,后续将逐渐凋谢虎墩音色给开发者应用,助力开发者利用在各类个性化场景。 Q2:机器学习服务提供的翻译和同声传译能力,如何赋能App打造新“声”态? A:文本翻译能力解决了用户因语言不通而导致交换不畅的痛点。比方通话场景,通过实时语音辨认,能够疾速将辨认的文字转化为指标语言文字;浏览场景,反对提词翻译器性能,帮忙用户快捷看到译文;视频类App集成文本翻译服务后,用户能够晦涩体验AI实时字幕性能。通过对语音辨认、机器翻译、语音合成三项技术的有机整合,同声传译能力有较低时延、较高准确率的个性,实用于会议、直播、演讲等实时性高的场景,反对利用将音频内容实时输入为指标语言文字,生成双语字幕,同时对目标语言文本进行实时播报,升高了解老本,兼具品质与效率。 Q3:除以上语音语言类能力,机器学习服务有新推出其它创新能力吗? A:在金融电商畛域,机器学习服务还提供了活体检测能力。动作活体检测能力应用人脸关键点定位和人脸追踪等技术,通过指令配合动作的模式能够验证用户是否为实在活体自己操作。在银行、证券和借贷等实名制和安全性要求较高的金融畛域,活体检测可作为用户近程注册和密码找回环节中的辅助验证,帮忙用户甄别欺诈行为,无效抵挡攻击行为,保障业务平安。 Q4:机器学习的宏观技术发展趋势是怎么的? A:首先,机器学习会更加重视情感体验。机器将具备辨认、了解和表白喜怒哀乐的能力,辨认用户的需要以及环境信息的变动,了解人的情感用意,做出适当反馈;其次,是多模态的倒退。深度学习技术正从语音、文字、视觉等单模态向学习多模态智能学习倒退。将来甚至能够对嗅觉、味觉、心理学等难以量化的信号进行交融,实现多个模态的联结剖析,在更多场景、更多业务上辅助人类工作;再次,是多技术的交融,比方VR/AR以及元宇宙等。置信将来AI还将出现多平台多零碎协同态势,以实现更为宽泛的赋能,将通用平台、行业平台和端侧利用的协同组合,以软硬一体的形式实现具体利用的性能定制和扩大。 欢送登录HMS Core机器学习服务首页理解更多技术细节。 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

July 29, 2022 · 1 min · jiezi

关于android:如何让照片中的人物笑起来HMS-Core视频编辑服务一键微笑功能让人物笑容更自然

最近一键“露齿笑”席卷全网,无论是短视频用户还是社交App用户都在应用这项黑科技。当三两好友团聚拍集体照纪念时,为了解决个别人的表情“瑕疵”,让大家都尽量放弃微笑,总要进行表情微调,但如果须要进行简单的换头换脸等P图操作,对用户来说门槛太高。有些用户“镜头恐怖”,拍照时不会微笑、表情难堪;有些用户对本人牙齿不自信,不敢拍照露齿笑。而当初,华为HMS Core视频编辑服务“一键微笑”性能能够很好解决用户的需要,可能自动检测照片中的人像,对表情进行批改,从而晋升开心水平;可将检测到的人像由不笑到抿嘴微笑,也可张嘴露齿微笑,微笑天然且不会扭转本来人脸的正当构造。 解决前 解决后 性能介绍输出一张蕴含一个或多个人脸(最多反对3人)的图片,检测人脸并对其进行微笑解决,基于原人脸信息实现一键微笑,生成微笑图片。 Demo演示 上面咱们就一起来实操一下如何接入华为视频编辑服务,实现“一键微笑”性能: 1. 开发筹备具体筹备步骤可参考华为开发者联盟官网 2. 编辑工程集成2.1 设置利用的鉴权信息 能够通过api_key或者Access Token来设置利用鉴权信息。 通过setAccessToken办法设置Access Token,在利用启动时初始化设置一次即可,无需屡次设置。 MediaApplication.getInstance().setAccessToken("your access token");通过setApiKey办法设置api_key,在利用启动时初始化设置一次即可,无需屡次设置。 MediaApplication.getInstance().setApiKey("your ApiKey");2.2设置惟一标识ID,即License ID。 License ID是进行管控的无效凭证,您要保障设置License ID的唯一性。 MediaApplication.getInstance().setLicenseId("License ID");2.2.1初始化Editor运行环境 创立编辑工程,须要首先创立Editor对象并初始化其运行环境。当来到编辑工程时,应开释Editor实例。 (1) 创立Editor对象 HuaweiVideoEditor editor = HuaweiVideoEditor.create(getApplicationContext());(2) 指定预览窗口的布局地位 预览窗口负责视频图像画面的渲染,由视频编辑原子能力SDK外部创立SurfaceView来实现。在创立窗口之前,须要在您的App中指定预览窗口的布局地位。 <LinearLayout android:id="@+id/video_content_layout" android:layout_width="0dp" android:layout_height="0dp" android:background="@color/video_edit_main_bg_color" android:gravity="center" android:orientation="vertical" />// 指定预览窗口 LinearLayout mSdkPreviewContainer = view.findViewById(R.id.video_content_layout);// 设置预览窗口承载的布局 editor.setDisplay(mSdkPreviewContainer);(3) 初始化运行环境,如果License鉴权失败,会抛出LicenseException。 当Editor对象创立之后,此时还没有占用理论的系统资源,须要手动抉择其环境初始化的机会,此时视频编辑原子能力SDK外部会创立必须的线程和定时器等。 try { editor.initEnvironment(); } catch (LicenseException error) { SmartLog.e(TAG, "initEnvironment failed: " + error.getErrorMsg()); finish(); return; }3 “一键动效”能力集成 ...

July 28, 2022 · 1 min · jiezi

关于android:NDK-系列6说一下注册-JNI-函数的方式和时机

请点赞关注,你的反对对我意义重大。 Hi,我是小彭。本文已收录到 GitHub · Android-NoteBook 中。这里有 Android 进阶成长常识体系,有气味相投的敌人,关注公众号 [彭旭锐] 带你建设外围竞争力。 前言在上一篇文章中,咱们提到了注册 JNI 函数(建设 Java native 办法和 JNI 函数的映射关系)有两种形式:动态注册和动静注册。明天咱们来具体说下这 2 种注册形式的应用办法和实现原理。 这篇文章是 NDK 系列文章第 6 篇,专栏文章列表: 一、语言根底: 1、NDK 学习路线:怎么学 & 我的教训2、C 语言根底3、C ++ 语言根底4、C/C++ 编译过程:从源码到程序运行二、NDK 开发: 1、JNI 根底:Java 与 Native 交互2、注册 JNI 函数:动态注册 & 动静注册(本文)3、NDK 根底:ndk-build & CMake4、so 文件加载过程剖析:了解 Android 中 loadLibrary() 的执行流程5、so 文件适配 64 位架构:Gradle 插件一键检索未适配项6、so 文件动态化:动静下载7、so 文件体积优化:文件精简三、基础理论 1、视频基础理论2、音频基础理论3、H.264 视频压缩编码4、音频压缩编码5、FFMPEG 根底6、OPENSL ES 根底7、PNG 图片:无损压缩编码四、计算机根底 1、字符编码:ASCII、Unicode、UTF-8、UTF-16、UTF-321. 动态注册 JNI 函数1.1 动态注册应用办法动态注册采纳的是基于「约定」的命名规定,通过 javah 能够主动生成 native 办法对应的函数申明(IDE 会智能生成,不须要手动执行命令)。例如: ...

July 27, 2022 · 4 min · jiezi

关于android:2021字节最值得关注的10个开源项目

在软件开发行业,【开源是让技术走向遍及、下沉落地的不二法门】。开源软件系统性地利用开放式开发和分布式同行评审,不仅升高了开发成本,还进步了软件品质。 以下是字节跳动技术团队2021年开源的我的项目,有哪些值得关注呢,上面一一揭晓。 1,sonicsonic 是字节跳动开源的一款 Golang JSON 库,基于即时编译(Just-In-Time Compilation)与向量化编程(Single Instruction Multiple Data)技术,大幅晋升了 Go 程序的 JSON 编解码性能。同时联合 lazy-load 设计思维,它也为不同业务场景打造了一套全面高效的 API。自 2021 年 7 月份公布以来, sonic 已被抖音、今日头条等业务采纳,累计为字节跳动节俭了数十万 CPU 核。 我的项目地址:https://github.com/bytedance/sonic 2,btracebtrace(又名 RheaTrace) 是抖音根底技术团队自研的一款高性能 Android Trace 工具,它基于 Systrace 实现,并针对 Systrace 不足之处加以改进。目前已有多款 App 接入,包含抖音、TikTok、今日头条、幸福里等,并为其体验优化提供强有力反对。 我的项目地址:https://github.com/bytedance/btrace 3,MonoioMonoio  是字节跳动服务框架组开源的基于 io-uring 的 thread-per-core 模型高性能 Rust Runtime,旨在为高性能网络中间件等场景提供必要的运行时。在与同类型工具的绝大部分测试中,Monoio 都具备更低的提早和更高的吞吐。Monoio  提供了 thread-per-core 场景下最高性能的 Runtime 实现,目前字节曾经开始基于 Rust 和 Monoio 构建下一代 Service Mesh。 我的项目地址:https://github.com/bytedance/monoio 4,ArcoDsignArcoDesign 是由字节跳动 GIP UED 团队和架构前端团队联合推出的企业级设计零碎。ArcoDesign 领有零碎的设计规范和资源,同时根据标准提供了丰盛的原子组件,笼罩了 React、Vue、Mobile、Chart 等框架和方向。在原子组件根底上也提供了丰盛的定制化工具,包含格调配置平台、物料平台等,也提供了资源平台包含 IconBox、品牌库、Arco Pro 最佳实际等。旨在帮忙设计师与开发者解放双手、晋升工作效率,更高效、高质量的打造合乎业务标准的中后盾利用。 ...

July 27, 2022 · 1 min · jiezi

关于android:虚拟偶像的歌声原来是这样生成的

HMS Core音频编辑服务(Audio Editor Kit)6.6.0版本上线,新增歌声合成能力。通过歌词和曲调,联合不同的曲风让机器也能生成真实度极高的歌声。反对字级别输出歌词进行音素转换,生成对应歌词的歌声,可灵便调整音高、滑音、呼吸音、颤音等细节参数,让歌声更实在。 歌声合成服务可广泛应用于音视频创意制作、影音娱乐、音乐教育、虚构偶像等畛域。例如,在音乐创作或短视频创意编辑时,歌声合成服务能够助力用户自在创作合成歌曲,使创作更加丰富多彩。在虚构偶像畛域,通过歌声合成,能够让虚拟人领有特定音色歌唱能力,使其形象更活泼。在音乐游戏或者歌唱教育中,歌声合成能够迅速生成规范参考声音,进步音频制作效率节俭人力老本。 歌声合成成果 听到了歌声合成媲美真人的歌唱成果,是否急不可待想上手应用了呢,以下是歌声合成的具体集成办法。快来亲自集成试试吧! 1.开发筹备1.1注册成为开发者在开发利用前须要在华为开发者联盟网站上注册成为开发者并实现实名认证,具体方法请参见帐号注册认证。 1.2创立我的项目及利用参见创立我的项目,而后在我的项目下创立利用实现利用的创立,非凡配置如下: 抉择平台:抉择“Web”。 1.3关上相干服务应用Audio Editor Kit服务须要您在AppGallery Connect上关上Audio Editor Kit服务开关,具体操作步骤请参见关上服务开关。 2.歌声合成性能集成2.1同步接口(流式)2.1.1获取access_token鉴权信息 应用开发者联盟界面取得的客户端ID以及对应密钥,发送HTTPS POST申请,获取查问access_token。获取形式请参见客户端模式(Client Credentials)。 2.1.2依据access_token调用同步接口(流式) 通过以上步骤获取的access_token信息,发送HTTPS POST调用同步接口(流式)。 示例代码(Java)如下所示: 其中requestUrl = "https://audioeditor-api-drcn.cloud.huawei.com/v1/audioeditor/gateway/ai/ttsing/sync"。 /** * 调用同步接口(流式) * @param accessToken 依据clientId和密钥获取的token * @throws Exception IO异样 */ private static void syncTask(String accessToken) throws Exception { // 设置申请header PostMethod postMethod = new PostMethod(requestUrl); postMethod.setRequestHeader("Content-Type","application/json;charset=utf-8"); postMethod.setRequestHeader("X-Request-ID","9af1aeda-531b-407a-80b4-65b40ef77bd6"); postMethod.setRequestHeader("X-Package-Name","com.huawei.demo"); postMethod.setRequestHeader("X-Country-Code","cn"); postMethod.setRequestHeader("HMS-APPLICATION-ID","123456"); postMethod.setRequestHeader("certFingerprint","xxxxx"); postMethod.setRequestHeader("Authorization","Bearer " + accessToken); // 设置申请body Map<String, Object> bodyMap = new HashMap<>(); Map<String, Object> dataMap = new HashMap<>(); Map<String, Object> configMap = new HashMap<>(); // filePath是MusicXML文件门路(含文件名、后缀) String lyricFilePath = "filePath"; dataMap.put("lyric", FileUtils.readFileToString(new File(lyricFilePath), "UTF-8")); dataMap.put("language", "chinese"); configMap.put("type", 1); configMap.put("outputEncoderFormat", 0); bodyMap.put("data", dataMap); bodyMap.put("config", configMap); RequestEntity requestEntity = new StringRequestEntity(JSONObject.toJSONString(bodyMap),"application/json" ,"UTF-8"); postMethod.setRequestEntity(requestEntity); HttpClient httpClient = new HttpClient(); int ret = httpClient.executeMethod(postMethod); if (ret == 200) { Header responseHeader = postMethod.getResponseHeader("content-type"); if ("application/octet-stream".equals(responseHeader.getValue())) { InputStream rpsContent = postMethod.getResponseBodyAsStream(); // filePath是要保留文件的门路(含文件名、后缀) String filePath = "filePath"; FileUtils.copyInputStreamToFile(rpsContent, new File(filePath)); } else { String errorString = postMethod.getResponseBodyAsString(); System.out.println(errorString); } } else { System.out.println("callApi failed: ret =" + ret + " rsp=" + postMethod.getResponseBodyAsString()); } }2.2异步接口2.2.1创立异步工作 ...

July 27, 2022 · 3 min · jiezi

关于android:想让照片中的云飘起来视频编辑服务一键动效3步就能实现

分享和创作短视频曾经成为人们记录美好生活的一种形式,很多用户在剪辑时会呈现素材不够的状况,这时往往会抉择用几张图片作为补充素材。然而视频中交叉图片又会让作品中的过渡局部显得非常僵硬和刻意;那么怎么通过前期剪辑性能补救图片的毛病,让用户顺畅实现视频创作呢? 给图片增加动效就能解决这个问题,动效能够让动态照片产生动静视频成果,可能将片段天然流畅地衔接起来,使整个作品更加地谐和。 这种动态效果,须要用户在业余的特效工具中手动设置锚点,能力产生流体静止成果,操作简单。而当初,集成华为HMS Core视频编辑服务“一键动效”性能,就能让用户疾速实现此成果,让手机相册中动态风光照,能够随时随地“动起来”。 HMS Core视频编辑服务“一键动效”性能 “一键动效”性能能够让动态风景图片实现视频动态效果,输出一张有天空或者水面的图片,“一键动效”让天空中的云朵飘动或者水面流动。开发者还可手动设置静止速度、静止方向、一键移除成果等,让动效更真切。 上面咱们就一起来实操一下如何集成华为视频编辑服务,实现“一键动效”性能: 1 . 开发筹备具体筹备步骤可参考华为开发者联盟官网 2. 编辑工程集成2.1 设置利用的鉴权信息能够通过api_key或者Access Token来设置利用鉴权信息。 · 通过setAccessToken办法设置Access Token,在利用启动时初始化设置一次即可,无需屡次设置。 MediaApplication.getInstance().setAccessToken("your access token");· 通过setApiKey办法设置api_key,在利用启动时初始化设置一次即可,无需屡次设置。 MediaApplication.getInstance().setApiKey("your ApiKey");2.2设置惟一标识ID,即License ID。License ID是进行管控的无效凭证,您要保障设置License ID的唯一性。 MediaApplication.getInstance().setLicenseId("License ID");初始化Editor运行环境,创立编辑工程,须要首先创立Editor对象并初始化其运行环境。当来到编辑工程时,应开释Editor实例。 (1) 创立Editor对象 HuaweiVideoEditor editor = HuaweiVideoEditor.create(getApplicationContext());(2) 指定预览窗口的布局地位 预览窗口负责视频图像画面的渲染,由视频编辑原子能力SDK外部创立SurfaceView来实现。在创立窗口之前,须要在您的App中指定预览窗口的布局地位。 <LinearLayout android:id="@+id/video_content_layout" android:layout_width="0dp" android:layout_height="0dp" android:background="@color/video_edit_main_bg_color" android:gravity="center" android:orientation="vertical" />// 指定预览窗口 LinearLayout mSdkPreviewContainer = view.findViewById(R.id.video_content_layout);// 设置预览窗口承载的布局 editor.setDisplay(mSdkPreviewContainer);(3) 初始化运行环境,如果License鉴权失败,会抛出LicenseException。 当Editor对象创立之后,此时还没有占用理论的系统资源,须要手动抉择其环境初始化的机会,此时视频编辑原子能力SDK外部会创立必须的线程和定时器等。 try { editor.initEnvironment(); } catch (LicenseException error) { SmartLog.e(TAG, "initEnvironment failed: " + error.getErrorMsg()); finish(); return; }3 “一键动效”能力集成// 初始化一键动效AI引擎imageAsset.initTimeLapseEngine(new HVEAIInitialCallback() { @Override public void onProgress(int progress) { // 初始化进度 } @Override public void onSuccess() { // 初始化胜利 } @Override public void onError(int errorCode, String errorMessage) { // 初始化失败 }});// 初始化胜利后,查看图片中是否有天空或者水面int motionType = -1;imageAsset.detectTimeLapse(new HVETimeLapseDetectCallback() { @Override public void onResult(int state) { // 记录state作为增加一键动效AI特效的参数 motionType = state; }});// skySpeed:天空的静止速度; skyAngle:天空的静止方向; waterSpeed:水面的静止速度; waterAngle:水面的静止方向HVETimeLapseEffectOptions options = new HVETimeLapseEffectOptions.Builder().setMotionType(motionType) .setSkySpeed(skySpeed) .setSkyAngle(skyAngle) .setWaterAngle(waterAngle) .setWaterSpeed(waterSpeed) .build();// 增加一键动效AI特效imageAsset.addTimeLapseEffect(options, new HVEAIProcessCallback() { @Override public void onProgress(int progress) { } @Override public void onSuccess() { } @Override public void onError(int errorCode, String errorMessage) { }});// 中断一键动效AI特效解决imageAsset.interruptTimeLapse();// 移除一键动效AI特效imageAsset.removeTimeLapseEffect();HMS Core视频编辑服务除了反对一键动效,还提供根底视频编辑、AI着色、专属滤镜、精彩片段、一键染发、人物追踪、人脸暗藏等视频创作能力,开发者可根据利用场景,在App中轻松实现视频编辑性能的集成。 ...

July 26, 2022 · 1 min · jiezi

关于android:产品动态丨Android-13-高效适配全新升级

谷歌从2022年2月开始启动 Android 13 开发者预览版打算,将于2022年6月的 Beta版3 达成“平台稳定性”里程碑,并预计在今年年底公布最终版本。谷歌倡议开发者将“平台稳定性”里程碑作为布局最终兼容性测试和公开公布的指标。本次新版本次要涵盖了开发者工作效率、图形、性能、电池、隐私权和平安方面的变更。对此,MobTech袤博科技资深Android开发工程师将联合最新的开发者预览版,解读Android 13在利用开发中须要留神的要点。 针对Android 13 颁布的新个性及变动,MobTech将继续关注,并依照谷歌倡议进行对应的适配,从而保障旗下开发者服务相干产品的用户体验。咱们的适配工作次要聚焦于隐衷、平安的适配、性能兼容适配测试和灰名单的适配,以后ShareSDK、MobLink、SecVerify、SMSSDK根底性能失常,MobPush、MobAdPush适配工作正在进行,预计7月份实现。    Android 13 环境配置通过SDK Manager 下载Android SDK Build-Tools 33更新利用的 build 配置AGP 7.0.0 或更高版本AGP 4.2.0 或更低版本Pixel手机刷入,需返回Android开发者平台获取相应的image或在AS中下载Android 13模拟器   新性能应用1. 带主题的利用图标从 Android 13 起,用户能够抉择启用带主题的利用图标。借助此性能,用户能够调节受反对的 Android 启动器中利用图标的色调,以继承所选壁纸和其余主题的配色。 2. 按利用设定的语言偏好设置Android 13 针对反对多种语言的利用引入了以下新性能:① 使利用可在运行时设置在界面中应用其余语言的 API② 容许用户为每个利用抉择首选语言的零碎设置③ 不反对多种语言的利用不受这些变更的影响 应用形式: ① 应用 AndroidX 反对库来实现 ② 应用 Android 框架 API 来实现 3. 改良了日语文本换行当初,TextView 能够按 Bunsetsu(最小天然语素单元)或短语而非字符进行文本换行,从而使日语利用的界面更加好看、易读。 应用形式: 成果如下:图片上半局部是未启用短语款式的日语文本换行,下半局部是启用了短语款式的日语文本换行。 4. 可编程的着色器Android 13 增加了对可编程 RuntimeShader 对象的反对,其行为是应用 Android 图形着色语言 (AGSL) 定义的。AGSL 与 GLSL 共用大部分语法,但可用于 Android 渲染引擎中以自定义 Android 画布中的绘制行为以及过滤 View 内容。Android 在外部应用这些着色器来实现涟漪成果、含糊以及拉伸滚动,并且 Android 13 能为利用制作相似的高级成果。 ...

July 25, 2022 · 2 min · jiezi

关于android:如何获取广告服务流量变现数据助力广告效果分析

广告服务(Ads Kit)提供流量变现服务,通过该服务开发者能够在本人的App中向用户展现Banner、原生、激励广告等多种形式的广告内容。而对于利用中已上线的广告位来说,因为波及到支出,所以日常的数据监控显得尤为重要。 为此广告服务也提供了流量变现服务报表API(Publisher Service Reporting API),通过接入该API,开发者能够获取利用内广告变现相干数据,包含广告申请量、返回量、展现率、点击率等,让开发者能够根据数据对广告成果进行剖析,从而及时调整投放策略。 开发者可依据返回的数据实现本人的报表展现成果 那么如何获取流量变现数据呢?以下是具体的集成步骤。 一.获取客户端ID和密钥在获取变现数据前,咱们要先有OAuth 2.0 客户端ID和密钥,用于生成调用报表API时传入的access_token,须要留神的是此处的客户端ID和密钥并不是指APPGallery Connect中利用的ClientID,而是通过在华为开发者联盟->凭证中创立的服务器利用的客户端ID。 注册成为开发者,实现实名认证。登录华为开发者联盟,点击右上角“管理中心”进入主页面。 进入“凭证”页面,创立我的项目,如果已有我的项目请跳过【步骤a】。a. 抉择“凭证”,依据下图标记程序填入“项目名称”和“我的项目别名”新建我的项目。 b. 选中创立的我的项目,点击“确定”。 抉择“OAuth 2.0 客户端 ID”创立客户端ID。 阐明: 如果我的项目下曾经存在“OAuth 2.0 客户端 ID”凭证,须要查看产品类型是否为服务器利用,如果是服务器利用能够跳过【步骤4】。 查看形式:点击操作一栏下的“编辑”按钮,查看“产品类型”。 如果不是“服务器利用”类型,须要从新创立“OAuth 2.0 客户端 ID”: 抉择“服务器利用”,输出“产品名称”,抉择“利用类型”和“默认语言”,点击“创立”;提醒“客户端ID”和“密钥”,点击“确定”。 进入“我的API”页面,确认选中的我的项目,点击“申请新的HMS API服务”。 下拉找到“App Services”,点击“流量变现服务报表API”。 点击“启用”,开启流量变现服务报表API,之后就能够调用流量变现报表API了 在“停用”后,再次“启用”时,因为页面缓存等起因,失效工夫是非实时失效的,须要期待大略6~10分钟。如果10分钟后没有失效,请从新进行尝试。 二.调用流量变现报表API在调用流量变现报表API前须要先获取access_token鉴权信息。调用接口: POSThttps://oauth-login.cloud.hua... 申请示例: POST /oauth2/v3/token HTTP/1.1Host: oauth-login.cloud.huawei.comContent-Type: application/x-www-form-urlencodedgrant_type=client_credentials& client_id=<客户端ID >& client_secret=<客户端密钥>申请示例截图: 须要留神的是,客户端ID和密钥,是在开发者联盟界面获取的服务器利用的客户端ID和密钥,而不是在APPGallery Connect中创立的挪动利用的客户端ID和密钥。 拿到access_token鉴权信息后,调用报表API。调用接口: POST https://ads.cloud.huawei.com/... 俄罗斯站点须要调用以下接口: POST https://ads-drru.cloud.huawei...申请示例: POST /openapi/monetization/reports/v1/publisher HTTP/1.1Content-Type: application/jsonAuthorization: Bearer *** Accept: application/jsonContent-Length: 233{ "start_date": "2022-06-01", "end_date": "2022-06-28", "filtering": { "currency": "CNY" }, "time_granularity": "STAT_TIME_GRANULARITY_DAILY", "page": 1, "page_size": 10}申请示例截图: ...

July 25, 2022 · 1 min · jiezi

关于android:3Android高仿网易云音乐首页复杂发现界面布局和功能RecyclerView复杂布局

0.效果图 效果图顺次为发现界面顶部,蕴含首页轮播图,程度滚动的按钮,举荐歌单;而后是发现界面举荐单曲,点击单曲就是间接进入播放界面;最初是全局播放管制条上点击播放列表按钮显示的播放列表弹窗。 1.整体剖析整体应用RecycerView实现,每个不同的块是一个Item,例如:轮播图是一个Item,按钮也是,举荐歌单和上面的歌单是,举荐单曲,还有最初的自定义首页那块也是一样。 提醒:之所以把举荐歌单上面的歌单和举荐歌单题目放一个Item,次要是首页要实现自定义程序性能,更方便管理。2.轮播图2.1 布局<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_height="wrap_content" android:layout_margin="@dimen/padding_outer"> <com.youth.banner.Banner android:id="@+id/banner" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintDimensionRatio="H,0.389" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>2.2 显示数据//bannerBannerData data = (BannerData) d;Banner bannerView = holder.getView(R.id.banner);BannerImageAdapter<Ad> bannerImageAdapter = new BannerImageAdapter<Ad>(data.getData()) { @Override public void onBindView(BannerImageHolder holder, Ad data, int position, int size) { ImageUtil.show(getContext(), (ImageView) holder.itemView, data.getIcon()); }};bannerView.setAdapter(bannerImageAdapter);bannerView.setOnBannerListener(onBannerListener);bannerView.setBannerRound(DensityUtil.dip2px(getContext(), 10));//增加生命周期观察者bannerView.addBannerLifecycleObserver(fragment);bannerView.setIndicator(new CircleIndicator(getContext()));按钮3.1 布局<?xml version="1.0" encoding="utf-8"?><HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingVertical="@dimen/padding_outer" android:scrollbars="none"> <LinearLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingHorizontal="@dimen/padding_meddle"> </LinearLayout></HorizontalScrollView>3.2 显示数据LinearLayout container = holder.getView(R.id.container);if (container.getChildCount() > 0) { //曾经增加了 return;}//横向显示5个半float containerWidth = ScreenUtil.getScreenWith(container.getContext()) - DensityUtil.dip2px(container.getContext(), 10 * 2);int itemWidth = (int) (containerWidth / 5.5);DiscoveryButtonBinding binding;LinearLayout.LayoutParams layoutParams;for (IconTitleButtonData it : data.getData()) { binding = DiscoveryButtonBinding.inflate(LayoutInflater.from(getContext())); binding.icon.setImageResource(it.getIcon()); binding.title.setText(it.getTitle()); if (it.getIcon() == R.drawable.day_recommend) { SuperViewUtil.show(binding.more); //显示日期 binding.more.setText(String.valueOf(SuperDateUtil.currentDay())); } //设置点击事件 binding.getRoot().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); layoutParams = new LinearLayout.LayoutParams(itemWidth, ViewGroup.LayoutParams.WRAP_CONTENT); container.addView(binding.getRoot(), layoutParams);}4.举荐歌单4.1 布局<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <include layout="@layout/item_discovery_title" /> <androidx.recyclerview.widget.RecyclerView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingHorizontal="@dimen/padding_outer" android:paddingBottom="@dimen/d5" /></LinearLayout>4.2 显示数据private void bindSheetData(BaseViewHolder holder, SheetData data) { //设置题目,将题目放到每个具体的item上,益处是不便整体排序 holder.setText(R.id.title, R.string.recommend_sheet); //显示更多容器 holder.setVisible(R.id.more, true); holder.getView(R.id.more).setOnClickListener(v -> { }); RecyclerView listView = holder.getView(R.id.list); if (listView.getAdapter() == null) { //设置显示3列 GridLayoutManager layoutManager = new GridLayoutManager(listView.getContext(), 3); listView.setLayoutManager(layoutManager); sheetAdapter = new SheetAdapter(R.layout.item_sheet); //item点击 sheetAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) { if (discoveryAdapterListener != null) { discoveryAdapterListener.onSheetClick((Sheet) adapter.getItem(position)); } } }); listView.setAdapter(sheetAdapter); GridDividerItemDecoration itemDecoration = new GridDividerItemDecoration(getContext(), (int) DensityUtil.dip2px(getContext(), 5F)); listView.addItemDecoration(itemDecoration); } sheetAdapter.setNewInstance(data.getData());}5. 底部5.1 布局<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginVertical="@dimen/padding_outer" android:gravity="center_horizontal" android:orientation="vertical"> <androidx.appcompat.widget.LinearLayoutCompat android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical"> <TextView android:id="@+id/refresh_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableLeft="@drawable/refresh" android:gravity="center_vertical" android:text="@string/click_refresh" android:textColor="@color/link" android:textSize="@dimen/text_small" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/padding_small" android:text="@string/change_content" android:textColor="@color/black80" android:textSize="@dimen/text_small" /> </androidx.appcompat.widget.LinearLayoutCompat> <com.google.android.material.button.MaterialButton android:id="@+id/custom" style="@style/Widget.MaterialComponents.Button.UnelevatedButton" android:layout_width="wrap_content" android:layout_height="@dimen/d30" android:layout_marginTop="@dimen/padding_outer" android:backgroundTint="?attr/colorSurface" android:insetTop="0dp" android:insetBottom="0dp" android:text="@string/custom_discovery" android:textColor="@color/black80" android:textSize="@dimen/text_small" app:cornerRadius="@dimen/d15" app:elevation="0dp" app:strokeColor="@color/black80" app:strokeWidth="@dimen/d0_5" /></LinearLayout>5.2 显示数据holder.getView(R.id.refresh_button).setOnClickListener(v -> discoveryAdapterListener.onRefreshClick());holder.getView(R.id.custom).setOnClickListener(v -> discoveryAdapterListener.onCustomDiscoveryClick());6.迷你管制条他是一个自定义Fragment,哪里要显示就放到哪里就行了。 ...

July 24, 2022 · 2 min · jiezi

关于android:小红书携手HMS-Core畅玩高清视界种草美好生活

在雷同流量耗费的状况下,540p可秒变1080p?这不是魔法,通过视频超分辨率技术(简称视频超分),就能让视频变得更清晰。 7月20日,在小红书最新版本7.48的App中,用户就能体验到这项技术带来的优质视频体验。小红书和华为HMS Core单干,在挪动端上线了基于HUAWEI HiAI Foundation提供的视频超分能力,实现了视频笔记在雷同流量耗费的状况下,540p清晰度可秒变1080p的视觉效果,让用户真正享受到低成本观看晦涩清晰视频的快感。 真挚分享发明用户价值,同频摸索低成本高画质始终以来,小红书将用户基于实在生存的记录分享视为最贵重的财产,激励用户通过短视频、图文、直播等模式记录生存,分享生存形式,并基于趣味互动造成社区。以此为根底,小红书平台上涌现出内容与商业之间一直流转的良性交互,成长出独具特色的“种草经济”。 但在2K、4K屏幕分辨率已是支流的明天,用户对视频画质和体验成果的要求也越来越高,卡顿或视频分辨率太低都会让用户难以忍受。然而音视频畛域业务简单,端侧算力需要大、算法部署艰难,想要实现新的性能,构建新的业务场景并不容易。 如何为用户打造低成本高画质的视频播放体验,成为短视频畛域(尤其是各大头部短视频平台)迫切想要解决的问题。 与此同时,华为HMS Core通过对影像解决能力的一直积攒,联合多媒体技术和AI算法,为社交、影音行业的开发者提供了一套AI视频超分解决方案,轻松实现让用户观看低分辨率视频时也能享受高分辨率体验的成果。 对音视频畛域的统一摸索,为小红书与HMS Core的单干拉开了帷幕。 短视频超分加持,UGC种草刷到爽致力于打造“超清视界”的AI视频超分技术,通过机器学习,能够将低分辨率的图像、视频进行重建,使图像、视频更加清晰。但传统超分算法对运算资源有较大的需要,且受限于挪动端算力、算法功耗、多机型兼容性等问题,在挪动端上部署实时超分技术面临着微小挑战。 在本次单干中,小红书App通过接入基于HMS Core凋谢的HUAWEI HiAI Foudation,使能端侧超分业务。端侧视频超分模型对实时性要求较高,意味着视频超分性能不仅须要高算力,还须要通过底层硬件能力优化来降低功耗。HUAWEI HiAI Foundation作为端侧AI计算的平台底座,通过多IP协同、图交融优化等技术,充分发挥NPU硬件单元的算力,令视频超分以更低功耗更高性能在手机端侧高效运行。 这样一来,小红书开发者们就可通过升高或升高用户所观看视频的清晰度和码率,动态化选择网络环境,无效升高了宽带的应用老本,并且晋升了开发与经营效率。同时,端侧视频超分的落地,也让小红书用户以雷同的流量耗费,取得了更晦涩清晰的“种草”视频观看体验。 高效单干,深度摸索将来音视频行业有限可能小红书团队与华为HMS Core团队对接始于往年4月,单方单干高效,独特基于对媒体畛域的技术了解和计划,协同开发,很快便集成了HUAWEI HiAI Foundation并实现了端侧视频超分能力,通过AI硬件的减速,解决了功耗和性能的难题。小红书利用研发负责人邓林在提及与HMS Core单干感触时说到:“HMS Core帮忙咱们解决了端侧视频超分这一难题,这使得小红书的开发者们能够将更多精力放在业务翻新方面,用旗舰技术赋能晋升咱们的用户体验。” 目前,小红书“视频超分”性能部署至HUAWEI MateX2系列、P50 Pro、Mate 40系列等90多款华为NPU手机机型,以及HUAWEI MatePad系列等10多款华为NPU平板机型,在相干手机战争板刷小红书视频笔记都能取得优质体验。 音视频行业还存在着大量潜在的业务翻新需要,将来HMS Core和小红书也将继续摸索为用户提供更多个性化的服务,晋升用户体验,在静止类、赛事类等细分畛域上摸索更多翻新玩法。HUAWEI HiAI Foundation也始终在为开发者解决底层算力与体验中的切实问题和最新技术难点,对开发者凋谢底层算力平台,助力更多的算法迁徙到端侧部署。 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

July 22, 2022 · 1 min · jiezi

关于android:华为应用已经调用了checkAppUpdate接口为什么应用内不提示版本更新

问题形容利用已上线,我再更新了华为游戏服务SDK之后,测试发现利用启动后不弹版本更新提醒。但我的确依照官网领导文档要求,曾经调用了checkAPPUpdate检测更新接口。 参考文档:游戏降级 问题剖析和解决我找到华为技术反对,对方让我先自行检查一下几点: 接口调用代码是否正确。因为利用已上线,能够把更新包的版本号versionCode改小(比线上包的版本号小),看看本地装置更新包启动后是否会弹出版本更新提醒——华为利用的降级逻辑是依据版本号来的,只有线上有新版本(版本号比本地的大),就会提醒降级。利用启动后,能够取全量日志看下,如果能搜到UpdateSDK version is:xxx信息日志,也能阐明接口曾经调用。我对照下面三点都查看了下,确定接口调用了。 把日志发给华为技术,对方发现报错信息如下: Updateinfo is not recommend, reason: Uninstall the old version before installation ,is same signature: 1这个报错阐明我的游戏在不举荐更新列表外面,因为签名不统一。 这种状况,SDK不会提醒更新,然而去利用市场会看到相干提醒语。而后我关上利用市场搜寻游戏,果然看到了:“更新包签名与旧版本不统一,需先从设施上齐全卸载旧版本才可更新。可能导致程序数据或游戏存档失落,是否持续卸载”。 然而我本人查看了下,确定签名没有更改过。 而后华为技术反对通过appid查问到咱们游戏退出了华为的签名服务: 且过后勾选的是这个选项: 如果抉择“让AG Connect 创立并治理我的利用签名密钥”,AGC会对利用生成一个新的签名密钥,并应用新的签名密钥对利用重签名。简略能够了解为,我本人出包的时候签名是A,应用这种形式的签名服务后,华为做了重签名,所以线上包的签名变为B,而签名B我是无奈获取的,此时我本地出新包,用的还是签名A,这样新包和线上包签名就不一样了。所以就算checkAPPUpdate接口调用,且把versionCode改小了去测试,利用内不会提醒版本更新,在利用市场里会提醒签名不统一。只有当新包上线了,之前在利用市场上下载老包的玩家,才会在利用里被提醒有版本更新。 如果抉择“导出并上传密钥和证书”,AGC会应用CP上传的签名密钥对利用重签名,也就是说,这种形式下,只有我的新包是用我本人签名和上传密钥,就能够在新包上线前,本地测试利用内弹出版本更新框了。 在华为技术的剖析阐明下,我确认新包签名不变后,提交了审核。 PS: 下面两种华为“利用签名密钥”选项,一旦抉择其一,不反对批改。 如果新包用的签名和之前老包的(我本人的)签名不统一的话,审核会提醒签名不统一并驳回的。(而不是在利用市场外面提醒啦) 签名服务一旦退出了,不能删除,不过能够从新创立一个利用。

July 22, 2022 · 1 min · jiezi

关于android:Android多版本flavor配置之资源文件和清单文件合并介绍

常识背景Android studio降级到3.0之后,gradle减少了多维度治理配置,便于同一个我的项目中创立利用的不同版本,别离治理依赖项并签订配置。创立产品风味与创立构建类型相似:只需将它们增加到productFlavors {}代码块,并配置您想要的设置。产品风味反对与 defaultConfig雷同的属性,这是因为defaultConfig实际上属于ProductFlavor类。 工程中配置Flavor如下这个是module外面的build.gradle局部代码(android节点下),这外面次要减少的是productFlavors,这个就是用来配置不同我的项目的参数。 在这里我配置了三个我的项目,别离是intermodalTransport、onlineBattle、convergence。不同的我的项目ID当然须要不同,配置ID的办法有两种:  第一种就是间接应用applicationId这个属性,间接给intermodalTransport配置一个ID属性即可。第二种就是应用applicationIdSuffix这个属性,这个的意思是在defaultConfig的默认ID根底上,在前面追加一段,如下图示例代码。android {    defaultConfig {        applicationId "com.flavor.myapp"    }    productFlavors {       intermodalTransport{            applicationIdSuffix ".a"        }       onlineBattle {            applicationIdSuffix ".b"        }    }}Ps: 如上是build.gradle文件配置,配置实现后可在如下截图的Build Variants处看到相应配置的抉择菜单,截图如下: 资源文件配置我在build.gradle配置了三个我的项目,那么相应的须要建设三个资源文件夹,main属于工程主体,如下图所示。 Ps:在这三个文件夹外面创立资源的时候肯定要和main的文件格式统一,这个格局统一是指包名必须雷同。在配置Flavor中,在进行构建的时候会将选中的Flavor和main进行联合构建,说白了就是如果Flavor没有的货色就会应用main外面的代替,一般来说都会各自用各自的资源,比拟好治理。 Java文件:要求flavor中只寄存各自个性的java文件代码,main中搁置多个flavor公共的java文件代码。 清单文件Manifest清单文件不像Java代码文件那样,每个我的项目雷同的Java代码文件不能够和main中的Java代码文件共存,而是main和每个我的项目都能够有清单文件,然而又不会像res资源文件那样,我的项目中的res资源文件会笼罩main的res资源文件。 在编译的时候Android studio会把main的清单文件和选中我的项目的清单文件合并,然而合并就会呈现抵触。在这里只介绍两种合并办法:merge和replace 具体配置属性地位如下截图: Application属性字段:node Merge属性:一般来说以main中为主题,其余flavor为分支差别版本配置的时候应用,个别都是把flavor与main的清单文件合并取交加。 Replace属性:在呈现flavor与main中有雷同的属性名的时候,或优先应用flavor中的清单属性替换main,这个属性不倡议应用。 如何代码辨认以后处于哪个flavor开发环境?代码中获取配置文件"BuildConfig.java"中的各变量,以实现对应型号产品特定的性能和逻辑。 ...

July 22, 2022 · 1 min · jiezi

关于android:HMS-Core-Discovery第16期直播预告与虎墩一起玩转AI新声态

【导读】 随着人工智能一直倒退,机器学习技术也开始被宽泛地利用到教育、金融、批发、交通、医疗等各个领域,给咱们的生存带来微小的便当。本期Discovery直播以《与虎墩一起,玩转AI新“声”态》为主题,邀请了HMS Core 机器学习服务产品经理、机器翻译高级专家以及咱们的好敌人“虎墩”,展现机器学习的语音语言翻新技术,分享人工智能的宏观发展趋势。欢送大家准时进入直播间,一起玩转AI新“声”态。 【直播预报】 工夫:2022年7月28日19:00 直播平台: 【专家介绍】 Nicolas,华为2012实验室文本机器翻译高级专家 聚焦三代机器翻译的技术演进,以后次要负责神经网络机器翻译的数据构建和产品落地工作。 Hardy,HMS Core ML Kit 资深产品经理 有丰盛的机器视觉、语音等AI工作教训,次要负责HMS Core ML Kit产品相干工作。 虎墩,古灵精怪小镖师 千万级粉丝量与百亿级观看量的抖音网红IP 【直播看点】 1、抖音网红IP“虎墩小镖师”强势来袭 2、同声传译新亮相,底层技术大揭秘 3、AI翻译能力降级,语种裁减可播报 【报名形式】 形式一 扫描下方二维码填写问卷报名 形式二 点击链接报名: https://hwdeveloper.wjx.cn/vm... 【抽奖礼物】 参加直播的小伙伴能够参加线上抽奖。奖品多多,各位千万不要错过! HUAWEI FreeLace 无线耳机 华为随行Wifi 3 彩色 【什么是HMS Core Discovery?】 HMS Core Discovery是一档技术解读直播栏目。在这里,你将理解HMS Core凋谢能力背地的底层技术逻辑,更有各路技术专家为你详解利用开发之路上的点点滴滴,以及行业解决方案的利用之道。HMS Core Discovery还会在每期邀请行业大咖,展现单干案例,分享行业对技术的认识与洞见。 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

July 22, 2022 · 1 min · jiezi

关于android:融云超级群的新能力

作为构建实时社区的第一抉择,融云超级群自公布以来很好地满足了类 Discord 实时社区业务场景的客户需要。关注【融云寰球互联网通信云】理解更多 随着服务的一直推动,融云超级群服务也在继续更新迭代,以满足社区场景的不同业务需要。 外围性能上新(融云超级群结构图) 1. 超级群治理融云超级群服务满足无成员下限的社区互动需要,通过 Server API 实现对社区的根底治理能力,如创立、遣散社区,退出、移除社区成员、频道治理、禁言等,同时 Server API 的调用形式,使业务侧实现性能更加平安、可控。 群组治理操作时序图如下: 2. 频道治理频道是超级群服务的外围能力,也是社区场景下的外围业务性能。 管理员通过建设不同的频道来辨别主题内容,用户进入社区后,依据本人的趣味进入不同频道进行互动和获取征询信息,如游戏社区中常见的:游戏资讯、英雄教学、组队开黑等频道,满足不同成员的互动需要。 用户退出社区后,默认能够查看社区中凋谢的所有私有频道。随着社区的倒退,针对社区中好友用户或社区经营团队,也会存在其余成员不可见的私密沟通频道需要。 为满足社区中局部成员的私密沟通需要,管理员须要在社区中创立公有频道,并通过邀请或拉取指定成员的形式,将社区中的好友用户或社区经营治理团队退出到指定公有频道中,进行私密沟通。融云超级群,在原私有频道的根底上,提供公有频道能力,满足社区中一部分成员进行私密沟通的互动需要。 开发者在超级群下创立公有频道时,将指定的成员退出到公有频道白名单中,默认公有频道对应白名单中的用户能够在频道中收发音讯,非白名单中的用户,无奈在公有频道中接管、发送音讯。 3. 音讯互动融云 SDK 中提供了文本、表情、图片、视频、语音等多种内置音讯类型,开发者可间接应用进行音讯通信,同时可满足社区场景下丰盛的经营内容展现需要,如:多图文联合的内容展现形式,能够通过融云 SDK 自定义音讯的形式实现。 针对音讯内容融云提供了音讯批改、音讯撤回、音讯删除、音讯回复及音讯扩大设置等性能;其中,音讯扩大能力容许开发者对曾经发送胜利的音讯,设置自定义的附加内容,开发者在此能力根底上可实现更多的业务能力,如用户对某条音讯的表情标记性能。 4. 告诉设置社区场景下音讯告诉的设置逻辑绝对简单,管理员须要对社区、频道进行治理,设置默认的告诉状态。用户在退出社区后,依据对不同社区、频道内容的关注水平,也需设置不同的告诉揭示状态。 4.1 管理员设置场景:社区默认设置:管理员在创立社区后,设置此社区的默认告诉状态为“仅@音讯告诉”。用户退出社群后,如用户未针对此社群进行告诉设置,则社区频道下有新音讯时以管理员默认对社群设置的告诉状态为准,进行告诉揭示。频道默认设置:管理员在社群中创立不同的主题频道,如:降级攻略频道、组队交友频道、零碎告诉频道等,针对不同的频道类型须要设置不同的默认告诉状态。当频道中有新音讯生产,在成员未被动设置频道告诉状态时,以频道默认告诉设置为准。 4.2 社区成员设置场景:用户退出社区,默认社区频道中产生的新音讯告诉逻辑,以社区管理员设置的社区或频道默认的告诉状态为准。 但用户的兴趣爱好不同,对每个主题频道的关注水平也有所区别,所以须要对不同的频道设置不同的告诉状态,防止过多的告诉打搅。如用户针对指定频道设置告诉状态后则以用户设置为准。 融云超级群服务的告诉揭示逻辑,可灵便进行设置,反对以管理员或成员的场景设置不同频道的告诉揭示逻辑,满足不同角色的设置需要,同时反对多级别的告诉设置,包含:所有音讯告诉、仅@音讯告诉、@本人时告诉、@所有人时告诉、所有音讯都不告诉。开发者可依据业务须要灵便实现设置级别。 禁言设置针对社区管理员对指定频道或成员进行禁言治理的需要,融云超级群服务提供了对指定频道整体禁言和频道中指定用户禁言两种能力,可满足管理员的禁言设置需要。 频道整体禁言,在禁言后超级群中的所有成员,在该频道中都不能发送音讯。在整体禁言模式下,如须要指定成员能够在频道中发送音讯时,可将用户退出到整体禁言频道的白名单中,白名单中用户能够在整体禁言频道中发送音讯。 如只须要设置局部用户在某一频道中不能发送音讯时,可按频道设置指定用户的禁言性能,被禁言用户无奈在频道中发送音讯,但能够失常接管、查看频道中的音讯内容。 平安审核在内容监管日趋谨严、行政监管愈发严格的大环境下,令各大平台利用忧心忡忡的不再只有“流量”,还有“合规”和“内容平安”。实时社区须要对成员发送的非法信息进行无效拦挡,使平台经营更加平安、可继续,推动平台衰弱、疾速倒退。 融云与多家业余智能在线业务风控解决方案提供商达成了策略单干,为开发者提供基于音讯内容及音视频通信的审核能力,可无效拦挡音讯中含有涉政、违禁、暴恐、色情、广告等信息内容及网络欺骗行为,为社区经营提供平安保障。 反对平台除 iOS、Android、Web 原生 SDK 反对超级群服务外,提供 Flutter IM SDK,帮忙开发人员立足任意平台创立起好看、疾速且可能轻松移植的应用程序。 在 Flutter 2.0 的反对下,用户能够应用雷同的代码库将原生应用程序公布至 iOS、Android 应用程序。

July 21, 2022 · 1 min · jiezi

关于android:百度APP-Android包体积优化实践二Dex行号优化

01 前言在上一篇文章中,咱们简要介绍了 Android 包体积优化的基本思路以及各优化项。本文咱们会重点讲述 Dex 体积优化中的行号优化,优化指标是在可追溯原始调试信息的前提下,尽可能减少 DebugInfo 体积。 咱们参考了业界已有的行号优化计划(如支付宝、R8),采纳将行号集改为pc集的形式,做到最大水平复用 DebugInfo,同时解决了重载办法行号区间重叠问题,并提供残缺的原始行号 retrace 计划。 如图1-1所示,为两个办法的 DebugInfo 可视化映射过程,咱们会将指令集与原始行号的映射关系导出为 mapping 文件,并上传给服务端做后续的 retrace解决。能够发现,映射实现后两个办法的 DebugInfo 信息统一,即达到了可复用状态。 <p align=center>图1-1 两个办法 DebugInfo 映射过程</p> 接下来将具体讲述 DebugInfo 剖析、现有计划比照、百度APP优化计划及收益 等内容。 02 解构DebugInfo调试信息(DebugInfo)指的是利用于调试场景的字节码信息,次要包含源文件名、行号、局部变量、扩大调试信息等。行号优化就是去优化 DebugInfo 中蕴含的行号信息,以缩小 DebugInfo 区域大小,从而达到缩小字节码文件体积的目标。 |2.1 Dex DebugInfo如图2-1所示,在Dex文件格式[2]中,DebugInfo 处于 data 区域,由一系列debug\_info\_item 组成。 图2-1 Dex文件构造 通常状况下,debug\_info\_item 与类办法一一对应,其在 Dex 中的援用关系如下图2-2所示。Dex 为块状构造,援用区域的地位均通过 x\_off 偏移量确定。 图2-2 class -> method -> debug\_info援用关系 debug\_info\_item构造如图2-3所示,次要由两局部形成:header 和一系列debug\_event。 header 中蕴含办法起始行号、办法参数数量、办法参数名三局部信息;除header 外的 debug\_events 能够了解为一系列状态寄存器,记录pc指针与行号的偏移量。debug\_info\_item 实质上是一个状态机。 ...

July 21, 2022 · 4 min · jiezi

关于android:FAQ应用内支付服务无法拉起支付页面常见原因分析和解决方法

华为利用内领取服务(In-App Purchases)通过简便的接入流程为用户提供良好的利用内领取体验,然而在理论接入过程中,有一些开发者反馈测试时会无奈失常拉起领取页面,下文将详细分析问题呈现的5种情景,并给出解决方案,心愿给遇到相似问题的开发者提供参考。 情景1:AGC管制台上API治理中的领取API已关上,创立的商品也失效了,但查看日志发现报错60002 起因剖析:对IAP的申请后果验签时须要应用领取公钥,进行SHA256WithRSA签名校验,此公钥开发者未配置。 解决办法:请仔细检查以下三点是否设置: (1)API治理中领取API已关上(留神:用户在开明IAP服务,半个小时左右才起效)详情可参考官网文档 (2)确保公钥开关激活关上,且公钥应用正确 (3)在AGC后盾PMS(商品管理系统)上配置了相应类型的商品,并激活胜利 情景2:开发者进入会员中心编辑订阅页面,显示异样,报错60051 查看官网文档,错误码60051示意已购买型商品或者订阅型商品,不能再次购买; 起因剖析: 复现问题时咱们发现,订阅实现返回会员中心有个刷新动作,在刷新前点击订阅会异样,刷新后点击就是失常的。这是因为如果没有刷新或者刷新不及时,会存在上一次的缓存数据。在点击一个订阅商品之后,立刻再点击订阅另一个商品的时候,会把首次订阅的商品id带入,但该id并不是最新购买的订阅商品id,从而造成数据的不匹配,最终导致报错,无奈显示编辑页面。 解决办法: 倡议开发者对页面成果刷新机会进行优化解决,防止未刷新就去续费。 情景3:应用华为手机进行领取调试的时候报错60003,但PMS零碎中商品ID配置未发现问题。 起因剖析:首先报错60003个别是在PMS零碎中的商品信息配置有问题,能够到AGC网站后盾,在我的利用->经营-> 商品治理->商品列表 ,查看对应商品是否存在或者必填的信息是否正确残缺(例如商品名称,商品ID,价格,商品类型,是否激活)。 另外能够查看商品ID是否在客户端代码中填写正确,是否与AGC后盾的商品ID保持一致,请重点查看客户端代码中传入的字段是否有问题。 还有一点须要留神的是在设施上登录的华为账号的服务地点是否在IAP笼罩的范畴内。能够通过调用Task<IsEnvReadyResult> isEnvReady()接口判断以后设施登录的帐号所在的服务国家/地区是否在华为IAP领取服务反对结算的国家/地区中。 解决方案: 通过CP排查发现是客户端端代码传入的商品ID和AGC后盾配置的商品ID不统一,批改后问题已解决。 情景4:调用领取拉起收银台接口,第一次胜利拉起胜利领取页面,而后点击勾销返回,第二次再持续调用该接口为什么无奈拉起领取页面 ? 起因剖析:购买消耗性商品后,必须要先实现商品耗费,之后能力再次购买,否则会报错60051等错误码。 解决办法:对于消耗性商品进行补单操作 开发者须要在以下这四种场景下触发补单机制: · 利用启动时 · 购买申请返回-1(OrderStatusCode.ORDER_STATE_FAILED)时 · 购买申请返回60051(OrderStatusCode.ORDER_PRODUCT_OWNED)时 · 购买申请返回1(OrderStatusCode.ORDER_STATE_DEFAULT_CODE)时 如果IAP 后盾配置的退款回调地址谬误,须要重新配置。具体可参考文档 除了无奈拉起领取页面的问题以外,如何确认是否进入沙盒环境也是一个常见的问题。 情景5:应用沙盒帐号测试,没有弹出沙盒环境端侧提醒弹框,如何确认是否进入沙盒环境?起因剖析:首先进入沙盒测试环境,失常状况下会提醒以下弹框 然而在满足了沙盒环境的2个必要条件后,依然无奈提醒该对话框,是否示意没有进入沙盒测试? 以下是开发者通过isSandboxActivated接口打印出的相干数据 从打印的日志来看:满足了沙盒环境2个必要条件。 以后登录的华为帐号属于沙盒帐号VersionCode大于利用市场线上版本(该APK暂未公布利用市场,所以利用市场返回的版本号为0)很显著从后果来看实践上应该进入了沙盒测试环境。那么有没有其余办法来确认? 解决办法:是否胜利进入沙盒环境,能够通过以下几种办法排查 a) 查看返回的购买数据,参考下图: 如果华为订单号payOrderId以SandBox结尾,那么外表该笔订单属于沙盒测试产生的订单。 b)查看领取报表 能够查看领取报表,如果领取报表没有该笔订单,阐明该订单来自于沙盒测试产生的。(注:领取报表数据不是实时更新的,如果当天购买的订单,为了判断准确性,能够次日再刷新该报表验证) c)革除HMS Core 缓存能够尝试革除HMSCore缓存,端侧弹框是依据相应字段标识进行判断的,可能是缓存起因导致该值未及时刷新。可通过设置 –>利用和服务->利用治理->HMS Core 进行缓存清理。 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee ...

July 21, 2022 · 1 min · jiezi

关于android:携手HMS-Core分析服务以数据助力游戏高效增长

HMS Core剖析服务,以数据助力游戏高效增长,笼罩玩家全生命周期经营场景,与华为利用市场强强联合,玩转智能经营。 理解更多:https://developer.huawei.com/... 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

July 21, 2022 · 1 min · jiezi

关于android:一年时间过去了LiveData真的被Flow代替了吗-LiveData会被废弃吗

前言:在去年的这个时候,谷歌官网举荐应用 Flow 代替LiveData,一年工夫过来了,我置信还是有很多android开发的敌人和我一样有以下几个问题:Android开发人员须要从 LiveData 迁徙到 Kotlin Flows 吗?LiveData 当初是否已弃用?官网文档:https://developer.android.goo... 举荐浏览:https://zhuanlan.zhihu.com/p/... 举荐浏览:https://juejin.cn/post/697900... 通过浏览本文你能理解到或学到什么: ① Flow, Shared flow & State flow的应用(具体操作本文就不多说了,给大家举荐好文)② SharedFlow 和 StateFlow,它们也有本人的可变类型——MutableSharedFlow 和 MutableStateFlow,比照LiveData我到底用哪一个?③咱们曾经有了Flow,为啥还会有SharedFlow、StateFlow,Flow不够用吗?④我要迁徙到Flow吗?有人问:LiveData是不是真的快要被废除了。LiveData:你是成心找茬?我要迁徙到Flow吗?咱们先来答复这个大家最关怀的问题 论断:如果 LiveData 满足您的需要,那么就不急于替换它,如果是一个新我的项目,举荐在 UI 中用 LiveData,在Repo层 中用 Flow。上面请观赏RxJava与LiveData&Flow的爱恨情仇: 在2017年之前,大家都是应用RxJava去配合Retrofit实现网络申请,RxJava实现事件订阅。然而,谁用谁晓得 (真的简单,各种线程的切换,头脑爆炸,不过,当初用协程就能够啦) 。因为是真的简单,对大部分开发者不是很敌对,于是在2017年那样的环境下,谷歌推出了LiveData。然而LiveData的性能却齐全能够应用RxJava来实现,那么谷歌为啥还要费那么大劲整这么个库进去呢?当然是因为LiveData比较简单啦~(而且RxJava不是谷歌本人的货色,谷歌:我可不想当大冤种)。于是在之后的一段时间中,对于简略场景大家开始应用LiveData了,对于简单的场景大家还是在应用RxJava。因为LiveData驾驭不了简单场景啊。(LiveData:我太难了)。不过好在,Flow呈现了。Flow:LiveData老弟别怕,大哥给你撑腰来啦!(其实我来代替你来了,嘿嘿)至今,它们之间的爱恨情仇还在持续..... 援用 扔物线(朱凯)大佬的话:协程的 Flow 和 RxJava 的性能范畴十分类似——其实我感觉就是一样的——然而 Flow 是协程里必不可少的一部分,而协程是 Kotlin 里必不可少的一部分,而 Kotlin 是 Android 开发里必不可少的一部分——哦这个说的不对,从新说——而 Kotlin 又是 Android 当初主推的开发语言以及将来的趋势,这样的话,Flow 一进去,那就没 LiveData 什么事了。别说 LiveData 了,当前 RxJava 也没什么事了。LiveData会被废除吗?LiveData会因为Flow而被废除吗?尽管官网始终在举荐应用Flow代替LiveData,然而在GDG的社区中的答案和多位国内外的GDE口中的答案是:不会被废除! 起因有两点: 在简略的场景下应用LiveData曾经够了,而且LiveData比较简单,上手快,RxJava学习老本真的很高,Flow也绝对没有那么简略。Flow 是协程的货色,如果你用的是Java来开发Android,那么你没有方法应用Flow。而且当初招聘平台至多有50%以上的Android岗位还在应用Java,所以LiveData不会被废除!总结:如果不须要应用到 Kotlin 数据流的弱小性能,就用 LiveData。Flow是比LiveData更好,然而在特定的场景下LiveData更适合! SharedFlow 和 StateFlow,比照LiveData我到底用哪一个?外围:LiveData 实用于 MVVM,但不适用于 MVI在MVI中,View通过触发事件与ViewModel通信,而后在ViewModel的外部解决完这些事件后,收回新的ViewState并更新UI。而且应用LiveData解决视图状态非常简单,能够同时用于MVVM和MVI,然而当咱们想要像以前一样显示一个简略的Snackbar时问题就来了。如果咱们应用LiveEvent类,那么整个单向状态流就会受到烦扰,因为咱们只是在ViewModel中触发了一个事件来与UI交互,但它应该是相同的。而应用StateFlow和SharedFlow则能够解决这个问题。 ...

July 21, 2022 · 1 min · jiezi

关于android:谷歌大量删除-Android-开源项目中-Fuchsia-代码意欲何为

过来几年来,Google 对于 Fuchsia 的冀望,如同华为对 HarmonyOS 的冀望一样,不指望其可能取代 Android,但都心愿它们可能以一套操作系统实现横跨多平台的愿景,包含运行在智能手机、 PC、智能设施、物联网等设施之上。不过,要为新的操作系统谋出路,首先也要兼容 Android、Linux 应用程序,这样能力实现生态互通。为此,Google 投入数以十亿美元计的资金来开发,然而有些遗憾的是,其成绩寥寥无几。 近日,谷歌从安卓开源我的项目(AOSP)中移除了大量对于 Fuchsia 设施的代码,删除的具体起因不明。不过,这意味着在 Fuchsia 零碎上运行的 Android、Linux 程序的形式碰壁。   家喻户晓,在谷歌的构想中,Fuchsia 设施能够运行来自安卓和 Linux 等其余零碎的应用程序。想要达成这个指标有多种路径,谷歌最早尝试的是在一个虚拟机上运行残缺的安卓零碎实例,但这存在一些潜在的性能问题。另一种形式就是加强 Fuchsia 和安卓运行时环境的间接关系,在 2019 年时谷歌在 AOSP 里创立了一个我的项目,可能为 Fuchsia 设施创立安卓运行时。 这次这些代码的移除,正式标记着这种形式的终结。在留下的 TODO 信息里,表明谷歌正在创立一个新的 “Starnix” 我的项目,让 Fuchsia 可能“原生”运行为 Linux/安卓开发的利用和库,即一个从 Linux 的底层内核架构到 Fuchsia 的 Zircon 内核的翻译层。 事实上,Starnix 提案被承受并开始进行曾经超过一年多的工夫。在此期间,Fuchsia 团队在使 Linux 程序可能在 Fuchsia 设施上运行方面获得了重大进展。Starnix提供了一个专门的 Starnix shell 来测试 Fuchsia。这个 shell 反对运行在Linux上,更像是一个“小型 Android 零碎”。并且,Google还提供了通过adb命令拜访 Fuchsia 和 Starnix 的 Android 性能,就像拜访任何其余 Android 设施一样简略。 最近几年,Google 始终在发力 Fuchsia,为的是可能实现数十亿设施的互联。并且,Google 也正在扩充 Fuchsia 的 Starnix 团队,用来主攻构建一个稳固且与 Android 及其应用程序兼容的解决方案。的确如此,如果 Fuchsia 不能与 Android 上超过 10 亿的用户、开发商以及制造商实现互通,那么即便再次借助开源,仍然很难会有当初 Android 那样的盛世,愿Fuchsia能跟Android一样为万物互联带来新的抉择和机会。 ...

July 20, 2022 · 1 min · jiezi

关于android:受众分析与卸载分析全面升级HMS-Core分析服务660版本上新

精细化经营的大趋势下,细颗粒、多维度的用户剖析让开发者从饱和的业务红海中看到了更多增长可能。作为精益经营的重要利器,HMS Core剖析服务始终致力于深挖行业痛点并紧贴业务诉求,于近日公布全新6.6.0版本,进一步摸索数据分析的深度与广度。本次新版本次要降级亮点: 受众剖析全新降级,反对更粗疏的人群画像洞察。 新增卸载流向报告,通过用户卸载前后的流向剖析,深度定位卸载根因。 留存剖析反对将散失用户存为受众,对于用户的异样散失可开展多维分析,并联合针对性策略及时挽留。 页面剖析新增拜访时段散布,用户的产品应用偏好更加清晰。 转化事件回传新增留存指标,可将“次日留存”、“3日留存”、“7日留存”回传至HUAWEI Ads,进一步评估广告投放价值。 一、 原受众剖析降级为人群洞察,减少用户画像报告,深刻理解用户在本次新版本中,原“受众剖析”菜单正式更名为“人群洞察”,同时下设子菜单“用户分群”和“用户画像”,受众列表和新受众创立迁入“用户分群”;受众详情迁入“用户画像“。用户画像中新增人群画像模块,通过性别年龄、近7天生产状况等卡片,您能够大抵理解以后用户群体的根本详情,以便于制订更加正当的经营打算。 *测试环境,非实在数据 二、卸载剖析反对查看用户卸载前后流向,定位散失根因针对性解决问题“卸载剖析”从“行为剖析”中拆散并列,下设子菜单“卸载概览”和“卸载洞察”两局部。卸载洞察新增卸载流向剖析,可查看用户在卸载产品前后的竞品流向及应用状况。对流向占比拟高的产品,可联合竞品剖析,进一步定位用户卸载根因,剖析以后产品的短板劣势,为产品迭代优化找到正确方向。 *测试环境,非实在数据 三、留存分析模型可将散失人群一键存储,让唤醒与召回更有方向散失召回始终是用户经营过程中的重要环节之一,清晰的散失起因剖析对于召回工作的开展无疑事倍功半。在6.6.0新版本中,咱们降级了留存分析模型,在原有留存用户受众存储的根底上,新增散失用户存储,您能够进一步联合人群洞察,剖析未留存用户的行为特色偏好,通过差异化、定制化的经营策略将用户无效召回。 *测试环境,非实在数据 四、理解用户的页面拜访时段偏好,把握最佳经营机会APP的类别和页面性能差别让用户在拜访时段散布上存在显著偏好,这要求经营在推送相干内容时把握适合的推送时段,争取触达更多无效用户。页面剖析现已反对查看不同页面的拜访时段散布,通过不同时间段内的拜访次数与拜访用户数比照剖析,您可充沛理解用户的产品应用偏好,把握适合的经营机会。 *测试环境,非实在数据 五、更粗疏的用户粘性指标评估投放成果剖析服务后端转化事件的回传让广告成果评估和投放策略的调整有了数据撑持。本次新版本中,广告主始终关怀的用户粘性评估亦有进一步降级,新增“次日留存”、“3日留存”、“7日留存”等指标。基于用户的这些留存数据,广告主可进一步评估广告投放笼罩的指标人群匹配度及粘性,一直调优,晋升投放ROI。除此之外,本次HMS Core剖析服务6.6.0新版本在事件剖析、我的项目概览等模块亦有其余性能优化,想要理解本次版本更新的全部内容,可拜访产品更新日志。欢送拜访HMS Core剖析服务官网,理解更多数据驱动的精益经营场景! 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

July 20, 2022 · 1 min · jiezi

关于android:Android-面试题为什么-Activity-都重建了-ViewModel-还存在-Jetpack-系列3

请点赞,你的点赞对我意义重大,满足下我的虚荣心。 Hi,我是小彭。本文已收录到 GitHub · Android-NoteBook 中。这里有 Android 进阶成长常识体系,有气味相投的敌人,关注公众号 [彭旭锐] 跟我一起成长。 前言ViewModel 是 Jetpack 组件中较罕用的组件之一,也是实现 MVVM 模式或 MVI 模式的规范组件之一。在这篇文章里,我将与你探讨 ViewModel 实用和面试常见的知识点。如果能帮上忙请务必点赞加关注,这对我十分重要。 这篇文章是 Jetpack 系列文章第 3 篇,专栏文章列表: 一、架构组件: 1、Lifecycle:生命周期感知型组件的根底2、LiveData:生命周期感知型数据容器3、ViewModel:数据驱动型界面控制器(本文)4、Flow:LiveData 的代替计划5、从 MVC 到 MVP、MVVM、MVI:Android UI 架构演进6、ViewBinding:新一代视图绑定计划7、Fragment:模块化的微型 Activity8、RecyclerView:可复用型列表视图9、Navigation:单 Activity 多 Fragment 的导航计划10、Dagger2:从 Dagger2 到 Hilt 玩转依赖注入(一)11、Hilt:从 Dagger2 到 Hilt 玩转依赖注入(二)12、OnBackPressedDispatcher:解决回退事件的新姿态二、其余: 1、AppStartup:轻量级初始化框架2、DataStore:新一代键值对存储计划3、Room:ORM 数据库拜访框架4、WindowManager:增强对多窗口模式的反对5、WorkManager:增强对后台任务的反对6、Compose:新一代视图开发计划1. 意识 ViewModel1.1 为什么要应用 ViewModel?ViewModel 的作用能够辨别 2 个维度来了解: 1、界面控制器维度: 在最后的 MVC 模式中,Activity / Fragment 中承当的职责过重,因而,在后续的 UI 开发模式中,咱们抉择将 Activity / Fragment 中与视图无关的职责抽离进去,在 MVP 模式中叫作 Presenter,在 MVVM 模式中叫作 ViewModel。因而,咱们应用 ViewModel 来承当界面控制器的职责,并且配合 LiveData / Flow 实现数据驱动。2、数据维度: 因为 Activity 存在因配置变更销毁重建的机制,会造成 Activity 中的所有瞬态数据失落,例如网络申请失去的用户信息、视频播放信息或者异步工作都会失落。而 ViewModel 可能应答 Activity 因配置变更而重建的场景,在重建的过程中复原 ViewModel 数据,从而升高用户体验受损。对于 MVVM 等模式的更多内容,咱们在 5、从 MVC 到 MVP、MVVM、MVI:Android UI 架构演进 这篇文章探讨过。 ...

July 19, 2022 · 9 min · jiezi

关于android:开发者必读2022年移动应用运营增长洞察白皮书

华为开发者联盟、艾瑞征询和AppGrowing联结公布《2022年挪动利用经营增长洞察白皮书》,本白皮书意在展示国内挪动利用经营增长的现状、广告投放趋势,剖析和探讨挪动利用的经营思路变动和相干的经营服务变革,为开发者提供最新市场洞察,并针对用户增长的各个阶段的挑战出现解决办法,助力挪动利用取得用户和营收增长。 华为开发者联盟始终致力于全方位联接寰球开发者,以当先技术和凋谢能力赋能开发者翻新,以丰盛多元的经营推广资源减速开发者商业胜利,携手寰球开发者共建HMS生态瘠田。以下内容摘自白皮书。 请点击链接查看完整版《2022年挪动利用经营增长洞察白皮书》 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

July 19, 2022 · 1 min · jiezi

关于android:高仿Android网易云音乐OkHttpRetrofitRxJavaGlideMVCMVVM

1.我的项目简介这是一个应用Java(当前还会推出Kotlin版本)语言,从0开发一个Android平台,靠近企业级的我的项目(我的云音乐),蕴含了根底内容,高级内容,我的项目封装,我的项目重构等常识;次要是应用零碎性能,风行的第三方框架,第三方服务,实现靠近企业级商业级我的项目。 2.我的项目性能点隐衷协定对话框启动界面和动静解决权限疏导界面和广告轮播图和侧滑菜单首页简单列表和列表排序音乐播放和音乐列表治理全局音乐管制条桌面歌词和自定义款式全局媒体控制中心评论和回复评论评论富文本点击评论揭示人和话题朋友圈动静列表和公布高德地图定位和门路布局阿里云OSS上传视频播放和管制QQ/微信登录和分享商城/购物车\微信\支付宝领取文本和图片聊天音讯离线推送主动和手动查看更新内存透露和优化... 3.开发环境概述2022年5月开发实现的,所以全部都是最新的,均匀每3年会从新制作,当初曾经是第三版了。 JDK17Android 12/13最低兼容版本:Android 6.0Android Studio 2021.14.编译和运行用最新AS关上MyCloudMusicAndroidJava目录,而后期待齐全编译胜利,因为是企业级我的项目,所以第三方依赖很多,同时代码量也很多,所以必须要确认齐全编译胜利,能力运行。 5.我的项目目录构造├── MyCloudMusicAndroidJava│ ├── LRecyclerview //第三方Recyclerview框架│ ├── LetterIndexView //相似微信通讯录字母索引│ ├── app //云音乐我的项目│ ├── build.gradle│ ├── common.gradle //通用我的项目配置文件│ ├── config //配置目录,例如签名│ ├── glidepalette //Glide画板,用来从网络图片提取色彩│ ├── gradle│ ├── gradle.properties│ ├── gradlew│ ├── gradlew.bat│ ├── keystore.properties│ ├── local.properties│ ├── settings.gradle│ ├── super-j //专用Java语言扩大│ ├── super-player-tencent //腾讯开源的超级播放器│ ├── super-speech-baidu //百度语音辨认6.依赖框架内容太多,只列出局部。 //分页组件版本//这里能够查看最新版本:https://developer.android.google.cn/jetpack/androidx/releases/pagingdef paging_version = "3.1.1"//增加所有libs目录外面的jar,aarimplementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])//官网兼容组件,像AppCompatActivity就是该依赖外面的implementation 'androidx.appcompat:appcompat:1.4.1'//Material Design组件,像FloatingActionButton就是该依赖外面的implementation 'com.google.android.material:material:1.4.0'//官网提供的束缚布局,像ConstraintLayout就是该依赖外面的implementation 'androidx.constraintlayout:constraintlayout:2.1.0'//UI框架,次要是用他的工具类,也能够独自拷贝进去//https://qmuiteam.com/android/get-startedimplementation 'com.qmuiteam:qmui:2.0.1'//动静解决权限//https://github.com/permissions-dispatcher/PermissionsDispatcherimplementation "com.github.permissions-dispatcher:permissionsdispatcher:4.8.0"annotationProcessor "com.github.permissions-dispatcher:permissionsdispatcher-processor:4.8.0"//api:依赖会传递到其余利用本模块的我的项目implementation project(path: ':super-j')...//应用gson解析json//https://github.com/google/gsonimplementation 'com.google.code.gson:gson:2.9.0'//主动开释RxJava相干资源//https://github.com/uber/AutoDisposeimplementation "com.uber.autodispose2:autodispose-androidx-lifecycle:2.1.1"//banner轮播图框架//https://github.com/youth5201314/bannerimplementation 'io.github.youth5201314:banner:2.2.2'//图片加载框架,还援用他目标是,coil有些性能不好实现//https://github.com/bumptech/glideimplementation 'com.github.bumptech.glide:glide:+'annotationProcessor 'com.github.bumptech.glide:compiler:+'implementation 'androidx.recyclerview:recyclerview:1.2.1'//给控件增加未读音讯数红点//https://github.com/bingoogolapple/BGABadgeView-Androidimplementation 'com.github.bingoogolapple.BGABadgeView-Android:api:1.2.0'annotationProcessor 'com.github.bingoogolapple.BGABadgeView-Android:compiler:1.2.0'//webview进度条//https://github.com/youlookwhat/WebProgressimplementation 'com.github.youlookwhat:WebProgress:1.2.0'//日志框架//https://github.com/JakeWharton/timberimplementation 'com.jakewharton.timber:timber:5.0.1'implementation "androidx.media:media:+"//和Glide配合解决图片//能够实现很多成果//含糊;圆角;圆//咱们这里是用它实现含糊成果//https://github.com/wasabeef/glide-transformationsimplementation 'jp.wasabeef:glide-transformations:+'//圆形图片控件//https://github.com/hdodenhof/CircleImageViewimplementation 'de.hdodenhof:circleimageview:+'//下载框架//https://github.com/ixuea/android-downloaderimplementation 'com.ixuea:android-downloader:3.0.0'//阿里云oss//官网文档:https://help.aliyun.com/document_detail/32043.html//sdk地址:https://github.com/aliyun/aliyun-oss-android-sdkimplementation 'com.aliyun.dpa:oss-android-sdk:+'//高德地图,这里援用的是3d//https://lbs.amap.com/api/android-sdk/guide/create-project/android-studio-create-project#gradle_sdkimplementation 'com.amap.api:3dmap:+'//定位性能implementation 'com.amap.api:location:+'//百度语音相干技术,目前次要用在收货地址编辑界面,语音输入收货地址//https://ai.baidu.com/ai-doc/SPEECH/Pkgt4wwdx#%E9%9B%86%E6%88%90%E6%8C%87%E5%8D%97implementation project(path: ':super-speech-baidu')//TextView显示富文本,目前次要用在商品详情界面,显示富文本商品形容//https://github.com/wangchenyan/html-textimplementation 'com.github.wangchenyan:html-text:+'//Hutool是一个小而全的Java工具类库// 通过静态方法封装,升高相干API的学习老本// 进步工作效率,使Java领有函数式语言般的优雅//https://github.com/looly/hutoolimplementation 'cn.hutool:hutool-all:5.7.14'//支付宝领取//https://opendocs.alipay.com/open/204/105296implementation 'com.alipay.sdk:alipaysdk-android:+@aar'//融云IM//https://docs.rongcloud.cn/v4/5X/views/im/ui/guide/quick/include/android.htmlimplementation 'cn.rongcloud.sdk:im_lib:+'//微信领取//官网sdk下载文档:https://developers.weixin.qq.com/doc/oplatform/Downloads/Android_Resource.html//官网集成文档:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5implementation 'com.tencent.mm.opensdk:wechat-sdk-android:+'//内存透露检测工具//https://github.com/square/leakcanary//只有调试模式下才增加该依赖debugImplementation 'com.squareup.leakcanary:leakcanary-android:+'testImplementation 'junit:junit:4.13.2'androidTestImplementation 'androidx.test.ext:junit:1.1.3'androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'7.用户协定对话框 ...

July 19, 2022 · 14 min · jiezi

关于android:APICloud-可视化APP开发新手图文教程

本教程次要面向首次应用APICloud Studio3 中可视化工具的老手开发者,旨在通过简略清晰的图文形容,让老手开发者疾速把握可视化工具的应用。APICloud Studio3 可视化工具秉承低代码的设计理念,让开发者能够通过拖拽搭建积木的形式,所见即所得地疾速构建生成利用动态页面,并反对同步实时生成AVM跨端代码,工具内置丰盛的UI款式组件,节俭开发者大量的页面构建工夫,让开发者可能更加专一于利用业务逻辑的开发。1、工具下载下载最新版本的 APICloud Studio3下载地址(在PC端关上):https://www.apicloud.com/studio3PS: 注册 APICloud 官网账户2、激活进入可视化工具界面2.1 启动APICloud Studio3,点击左侧面板的登录按钮登录APICloud账户。PS: 还没有账户的同学,须要先点击「立刻注册」按钮,注册一个账户,否则前面无奈追随教程进行我的项目的创立等操作。2.2 创立我的项目顶部菜单抉择「我的项目」-「新建我的项目」关上新建我的项目界面,在界面填写各项内容,实现新我的项目的创立。留神: 「应用AVM.js开发」该选项须要激活,否则无奈应用可视化工具。2.3 抉择pages/main/main.stml页面文件,点击左上角的绿色图标(图中红色框选),即可进入可视化工具界面。PS: 可视化工具是深度捆绑的AVM多端引擎,所以只有扩大名为.stml的文件,才具备可视化能力(即显示切换到可视化的按钮),其余格局的文件无奈激活可视化界面。2.4 可视化工具界面——功能区展现阐明红色区域:零碎工具栏浅蓝区域:资源管理器面板 顶部菜单栏「查看」-「外观」-「显示侧栏」,能够开展或敞开侧栏面板(Mac快捷键⌘B)红色区域:便捷工具栏(点击左侧第一个绿色图标,可返回代码视图页面)深蓝区域:组件面板区绿色区域:页面编辑区黄色区域:性能面板区3、拖拽组件疾速构建页面元素3.1 组件分类概述组件面板区内,官网内置了大量各种款式、各种性能的组件。以后组件根本分为三大类,即UI组件、高阶组件和零碎组件,点击顶部的Tab导航栏即可切换组件分类。UI组件:将我的项目的UI设计页面中常见的各性能元素及其款式,进行了形象封装而造成的组件,因其组件进行了肯定水平的默认款式封装,在批改的自由度上会比零碎组件稍差一些。高级组件:在UI组件的根底上进行了更高级的封装,每一个高级组件都具备一个残缺的独立性能,也能够看做是具备性能逻辑的UI组件。零碎组件:将页面元素进行了最根本的形象,而造成的搭建页面的所需的最简根底组件,是构建页面的最小单元,同时也是具备最大自由度的组件,开发者能够基于以后组件进行最大自由度的批改,以满足本人的款式需要。3.2 增加组件鼠标左键选中组件,按住拖动到可视化工具的两头编辑区,即可实现组件增加。3.2.1 增加UI组件-button按钮3.2.2 增加高级组件-表单类-卡片单元格3.2.3 增加零碎组件-容器组件-viewPS: 对于容器组件的非凡阐明:容器组件是一类非凡的组件,它具备包容其余组件元素的个性,相当于一个组合组件的外包装器。灵便应用对应的容器组件,能够使咱们更加不便灵便地设计实现各种UI页面。所以在基于UI设计图进行页面的开发实现前,开发者肯定要对以后的UI设计图进行构造剖析,依照不同的构造布局,首先应拖拽对应构造的容器组件,实现构造布局,再逐次向容器内增加更加具体的性能组件。3.3 组件批改组件选中后的可视化页面性能示意图:复制按钮:能够疾速复制以后选中组件元素。删除按钮:能够疾速删除以后选中组件元素。3.3.1 批改组件的款式款式面板:能够批改以后选中组件的外观款式。在可视化编辑区选中组件,在右侧的面板切换到款式面板,将款式面板外部对应的款式参数批改为本人设定的款式参数即可实现组件的款式批改,款式里的相干参数与CSS的款式雷同,具备CSS根底的同学一看就能了解。具体可见下图,咱们以「零碎组件」-「展现组件」中的button按钮组件为例,拖入组件-选中组件-切换性能面板-「款式」。按截图批改组件的W(宽度)和H(高度),即可看见编辑器的组件的宽高尺寸同步变动。PS: 款式批改后,工具会主动在代码页面生成对应的style区域内生成组件同名的class款式,如:<template name='tpl'>...<button class="button_2">按钮</button>...<template name='tpl'><style>....button_2 {width: 120px;height: 50px}...</style>3.3.1.1 对于布局构造款式参数的阐明尺寸参数中W等同于CSS中的width,H等同于CSS中的height,宽度和高度也反对间接输出数字,如下面截图的W输出120也是能够的。留神:W参数和H参数比拟非凡,输出实现后,必须按下键盘回车键(Enter)才会失效,输入框失焦并不会让批改失效。主轴方向内的4个按钮等同于CSS中的:flex-direct: rowflex-direction: row-reverseflex-direction: columnflex-direction: column-reverse主轴对齐内的5个按钮等同于CSS中的:justify-content: flex-startjustify-content: flex-endjustify-content: centerjustify-content: space-betweenjustify-content: space-around副轴对齐内的5个按钮等同于CSS中的:align-items: flex-startalign-items: centeralign-items: flex-endalign-items: baselinealign-items: stretch换行内的3个按钮等同于CSS中的:aflex-wrap: nowrapflex-wrap: wrapflex-wrap: wrap-reverse3.3.1.2 对于margin、padding的非凡阐明图标:3.3.1.3 对于款式成果的非凡阐明款式面板内的批改,可视化工具会在代码层同步生成同名的class款式,以此种形式放弃款式的同步。因为class款式是绑定在组件最外层的元素上,所以抉择组件后在款式面板上进行的批改,仅对组件最外层的款式失效。因为UI组件和高级组件本身就具备了肯定的款式设置,所以局部款式的批改在这两种组件上可能会生效,特此说明,请开发者留神。3.3.2 批改组件的属性在可视化编辑区选中组件,在右侧的面板切换到款式面板,将款式面板外部对应的款式参数批改为本人设定的款式参数即可实现组件的款式批改,具体可见下图。3.3.2.1 通用属性通用属性是所有组件都具备的属性,依据不同组件封装时裸露的属性不同,各个组件的组件属性也不尽相同。id: string类型,规定元素的惟一id。例如:在代码中对应为id="button-1"hidden: boolean类型, 设置元素的hidden属性的值,以后参数映射到代码层上就是AVM语法的hidden。PS: hidden次要是对立与AVM引擎版本的逻辑,以后版本,仅零碎组件反对该参数来管制显示和暗藏,UI组件和高级组件尚不反对,所以当有需要去管制组件的显示或暗藏时,倡议优先应用上面的「条件显示」参数。例如:在代码中对应为hidden={false}条件显示:应用表达式来管制组件是否显示,以后参数映射到代码层上就是AVM语法的v-if,反对布尔值、表达式、函数和关联映射数据源。例如:在代码中对应为v-if="false"循环展现:以相似数组循环遍历的形式来展现复数的组件,反对关联映射页面数据源来遍历显示组件,以后参数映射到代码层上就是AVM语法的v-for。例如:在代码中对应为v-for="(item, index) in buttons"PS: 对于数据源的概念和应用,前面会讲到,本教程为老手教程,为了升高学习复杂度,这里先不开展。

July 19, 2022 · 1 min · jiezi

关于android:列表组件listview的使用flex布局教程以APICloud-AVM框架为例

avm.js是 APICloud 推出的多端开发框架。应用 avm.js 一个技术栈可同时开发 Android & iOS 原生 App、小程序和 iOS 轻 App,且多端渲染成果对立;全新的 App 引擎 3.0 不依赖 webView,提供百分百的原生渲染,保障 App 性能和体验与原生 App 统一。 list-view 定义可复用内容的竖向滚动视图,能够优化内存占用和渲染性能,反对下拉刷新和上拉加载。可应用 scroll-view 的根本属性。 list-view 外面可搁置 cell、list-header、list-footer、refresh 等组件,应用 cell 组件作为每项显示内容。 上面看一个 list-view 的示例: <template> <list-view id="listView" class="main" enable-back-to-top onscrolltolower={this.onscrolltolower}> <cell class="cell c-lc-rl_ac c-sy-border_bottom c-lc-ptb" onclick={this.itemClick}> <img class="img" src={item.url} alt=""> <text class="title c-filling-w c-pl">{item.title}</text> </cell> <list-footer class="footer"> <text>加载中...</text> </list-footer></list-view></template><style src='../../css/c-layout-mini.css' scoped></style><style>.main { width: 100%; height: 100%;}.cell { width: 100%; height: 70px;}.img { height: 50px; width: 50px; margin-left: 10px;}.title { height: 50px; font-size: 20px; line-height: 50px;}.footer { justify-content: center; align-items: center;}</style><script>export default { name: 'test', methods: { ...

July 19, 2022 · 3 min · jiezi

关于android:appstore证书制作过程以apicloud平台为例

制作App ID apple官网 - identifiers(详见 Apicloud文档) Apicloud证书页面 输出右边的input ,例如: APP IDS —— 刚刚制作的AppID Certificate Password —— 来自 2 的 distribution.p12 明码 制作certSigningRequest文件,导出p12 : 钥匙串拜访 —— 下载到桌面(例如:CertificateSigningRequest.certSigningRequest) —— 苹果官网Certificate页面上传此文件 —— 下载 - 关上 - 装置到钥匙串 - 导出distribution.p12 (须要明码,用于 Apicloud证书页面 password)(详见 Apicloud文档) Apicloud证书页面上传 : distribution.p12 ,例如: 正式版 / 测试版:下载的 distribution.p12 macOS制作mobileprovision文件(Appstore 类型证书) : apple官网profile页面 —— 制作正式版 + 测试版 —— 各自下载(例如:distribution.mobileprovision 和 distribution_adhoc.mobileprovision) (详见 Apicloud文档) Apicloud证书页面上传 : distribution.mobileprovision,例如: 正式版:下载的 distribution.mobileprovision 测试版:下载的 distribution_adhoc.mobileprovision 两个 watchkitapp.mobileprovision 能够不上传

July 19, 2022 · 1 min · jiezi

关于android:FAQ接入HMS-Core推送服务服务端下发消息常见错误码原因分析及解决方法

HMS Core推送服务反对开发者应用HTTPS协定接入Push服务端,能够从服务器发送上行音讯给终端设备。这篇文章汇总了服务端下发音讯最常见的6个错误码,并提供了起因剖析和解决办法,有遇到相似问题的开发者们快理解一下吧。 错误码一:80200001," Oauth认证谬误"起因剖析:下发音讯未增加Authorization申请参数或值为空。 利用A的APPID申请的Access Token,却用于给利用B推送音讯,也会呈现此错误码。 申请Access Token 下发音讯 解决办法:排查申请HTTP头中是否有入参Authorization申请参数。Authorization获取形式可参考文档、上行音讯API可参考文档。获取Access Token应用的APPID和下发音讯应用的APPID须要保持一致。错误码二:80300007,"Token有效谬误"起因剖析:token不非法,token中多或少了字符,例如下图中多了个空格。 给利用A下发音讯,token却是利用B的,这种状况也是起因之一。 解决办法:查看token参数是否正确;确保下发音讯应用的token,是获取于指标利用的错误码三:80300010,"音讯体中的Token数量不合乎默认值"起因剖析:开发者将“message”字段拼写错误,示例图中message字段结尾多了 'r';token地位不正确,字段构造问题;下发的token数量超过了限度,或token为空。 解决办法:确保message、token字段写入正确;message字段蕴含token,与 "android"同级; token的数量应在1-1000个,确认token参数的数量,参考字段构造及阐明请参考文档。错误码四:80200003,"Oauth Token过期"起因剖析:Authorization申请参数值中的Access Token已过期申请参数值不正确,多或少了其余字符。 解决办法:Access Token有效期为一个小时,若超过限定工夫,则须要从新获取并应用最新Access Token下发音讯。从新获取Access Token办法可参考文档确保应用的Access Token与获取的统一,复制Access Token时呈现转义字符,须要将“/”还原为“/”。错误码五:80100016,"音讯外面含有敏感信息"起因剖析:呈现这种报错阐明推送音讯内容中含有敏感信息 解决办法:因为不提供敏感词库,须要开发者自行检测内容;开发者能够接入推必安,下发音讯通过推必安审核后,华为不会二次审核。接入推必安的流程可[参考文档]()。注意事项:推必安审核通过后,须要将推必安返回通过的后果增加到华为Review字段的result对象中,这样下发音讯时华为能力晓得音讯审核已通过,华为也不会进行二次审核。"review": [ { "reviewer": "tuibian",[]() "type": 0, "result": { //以下为推必安返回后果 "code": 200, "data": { "auditEngine": "t****ine", "auditId": "0f74b*******0b3f490d", "labels": [] }, "msg": "Pass", "sign": "MEQCIBHc********IqLjw==" } } ]}并不是将整个音讯体都放到推必安“content”字段中,须要审核的是“message”外面的内容,同时会对音讯体内容按ASCII码升序排序后转为字符串格局进行审核。{ "validate_only":false, "message":{ //以下局部须要审核 "notification":{ "title":"message title", "body":"message body" }, "android":{ "collapse_key":0, "notification":{ "click_action":{ "type":2, "url":"https://example.com" } } }, "token":[ "pushtoken1" ] }} 因为审核过程繁琐,倡议缩小下发字段的应用,这样操作更简略也会防止下发音讯时呈现80100018错误码,该错误码指发给三方机构审核的音讯体与下发时的音讯体不统一。错误码六:sub_error":57303,"error_description":"appid is overload blocked","error":1302起因剖析:过多申请access_token被流控,流控阈值为1000个/5分钟。 ...

July 19, 2022 · 1 min · jiezi

关于android:如何打造3D立体世界跟随图片一同探寻

怎么让立体的手机,呈现出炫酷的三维平面世界成果?虚构与事实又要怎么完满联合? HMS Core图形等畛域能力全面凋谢,使能3D数字世界翻新。请追随图片一起进入HMS Core打造的3D平面世界吧。 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

July 19, 2022 · 1 min · jiezi

关于android:Android-Kotlin语言学习第三课自定义ContentProvider和SQlite学习增删改查

一:创立主界面增删改查 /** * @author zhiqiangRuan * @ClassName * @Date 2022/7/4 */class FiveActivity : BaseActivity(), View.OnClickListener { lateinit var addData: Button lateinit var deleteData: Button lateinit var queryData: Button lateinit var updataData: Button var bookId: String? = null override fun initView() { addData = findViewById<Button>(R.id.add_data) deleteData = findViewById<Button>(R.id.delete_data) queryData = findViewById<Button>(R.id.query_data) updataData = findViewById<Button>(R.id.update_data) addData.setOnClickListener(this) deleteData.setOnClickListener(this) queryData.setOnClickListener(this) updataData.setOnClickListener(this) } override fun initData() { } override fun getLayoutId(): Int { return R.layout.activity_five } override fun onClick(v: View?) { when (v?.id) { R.id.add_data -> { //增加数据 val uri = Uri.parse("content://com.cnstrong.leke.helloworld.provider/book") val values = contentValuesOf( "author" to "George Martin", "price" to 22.85, "pages" to 1040, "name" to "A Clash of King" ) val newUri = contentResolver.insert(uri, values) bookId = newUri?.pathSegments?.get(1) } /** * apply函数扩大了所有的泛型对象,在闭包范畴内能够任意调用该对象的任意办法,并在最初返回该对象. 次要的作用:是能够用来简化初始化对象的性能。 特地须要留神的是apply函数中示意对象自身应用的是this关键字而不是it。*/ R.id.query_data -> { //查问数据 val uri = Uri.parse("content://com.cnstrong.leke.helloworld.provider/book") contentResolver.query(uri, null, null, null, null)?.apply { while (moveToNext()) { val name = getString(getColumnIndex("name")) val author = getString(getColumnIndex("author")) val pages = getInt(getColumnIndex("pages")) val price = getDouble(getColumnIndex("price")) Log.d("FiveActivity", "book name is $name") Log.d("FiveActivity", "book author is $author") Log.d("FiveActivity", "book pages is $pages") Log.d("FiveActivity", "book price is $price") } close() } } R.id.update_data -> { //更新数据 bookId?.let { val uri = Uri.parse("content://com.cnstrong.leke.helloworld.provider/book/$it") val values = contentValuesOf( "name" to "A Storm of Swords", "pages" to 1216, "price" to 24.05 ) contentResolver.update(uri,values,null,null) } } R.id.delete_data->{ bookId?.let{ val uri = Uri.parse("content://com.cnstrong.leke.helloworld.provider/book/$it") contentResolver.delete(uri,null,null) } } } }}二:Xml文件 ...

July 18, 2022 · 5 min · jiezi

关于android:LiveData-还有学习的必要吗-Jetpack-系列2

请点赞,你的点赞对我意义重大,满足下我的虚荣心。 Hi,我是小彭。本文已收录到 GitHub · Android-NoteBook 中。这里有 Android 进阶成长常识体系,有气味相投的敌人,关注公众号 [彭旭锐] 跟我一起成长。 前言LiveData 是 Jetpack 组件中较罕用的组件之一,已经也是实现 MVVM 模式的规范组件之一,不过目前 Google 更多举荐应用 Kotlin Flow 来代替 LiveData;尽管 LiveData 不再是 Google 主推的组件,但思考到 LiveData 仍然存在于大量存量代码中,以及 LiveData 随同着 Android 生态倒退过程中衍生的问题和解决方案,我认为 LiveData 仍然有存在的意义。尽管咱们不再优先应用 LiveData,但不代表学习 LiveData 没有价值。这篇文章是 Jetpack 系列文章第 2 篇,专栏文章列表: 一、架构组件: 1、Lifecycle:生命周期感知型组件的根底2、LiveData:生命周期感知型数据容器(本文)3、ViewModel:数据驱动型界面控制器4、Flow:LiveData 的代替计划5、从 MVC 到 MVP、MVVM、MVI:Android UI 架构演进6、ViewBinding:新一代视图绑定计划7、Fragment:模块化的微型 Activity8、RecyclerView:可复用型列表视图9、Navigation:单 Activity 多 Fragment 的导航计划10、Dagger2:从 Dagger2 到 Hilt 玩转依赖注入(一)11、Hilt:从 Dagger2 到 Hilt 玩转依赖注入(二)12、OnBackPressedDispatcher:解决回退事件的新姿态二、其余: 1、AppStartup:轻量级初始化框架2、DataStore:新一代键值对存储计划3、Room:ORM 数据库拜访框架4、WindowManager:增强对多窗口模式的反对5、WorkManager:增强对后台任务的反对6、Compose:新一代视图开发计划1. 意识 LiveData1.1 为什么要应用 LiveData?LiveData 是基于 Lifecycle 框架实现的生命周期感知型数据容器,可能让数据观察者更加平安地应答宿主(Activity / Fragment 等)生命周期变动,外围概括为 2 点: ...

July 18, 2022 · 11 min · jiezi

关于android:有奖调研-让虚拟照入现实的完美AR开发平台长什么样

6年前的夏天,一款事实与虚构联合的手游成了有数玩家的心头好,手握智能手机,玩家就能在真实世界来一场妙不可言的探险,收集动漫作品里一五一十的宠物精灵。AR技术联合用户熟识青睐的内容模式,与事实环境中裁减虚构信息,实现了一次富丽亮相。 而后的短短几年,AR技术迅速倒退成各类利用的常客,从娱乐化利用到事实需要解决方案,AR缓缓融入营销展现、电商、教育、医疗等诸多畛域,展示了惊人的创新力和赋能力量,也为各类终端注入新的生机。 AR语境下,如何宽阔用户视线 科技技术的螺旋自卷,带来的是用户体验的一直降级。和诸多备受关注的技术一样,AR也经验着从“富丽亮相”到“悄无声息”融入生存的打磨过程。现在,AR语境下诞生的新的服务体验和性能,失去了用户的广泛认可。 AR+营销展现,将用户与产品及服务的互动晋升到新高度,关上营销想象力。2021年5月,哔哩哔哩会员购携手HMS Core AR Engine,一起开发AR特效商品展现,让用户可能真实感受到衍生品商品的细节,打造沉迷式营销。 哔哩哔哩会员购通过对图像的跟踪,将二维的塔罗牌有机地与环境产生融合,出现真实感十足的三维动画 AR+电商,除了全方位无差别展现商品外,AR带来更多惊喜。一站式造家的家居家装平台极有家,搭载HMS Core AR Engine,通过AR测量性能和高精度环境SLAM技术,手机扫描就能轻松构建屋宇环境,从而实现线上家居试排列。 此外,AR+出行,实景导航和倒车雷达让用户更加精准感知交通环境和倒车状况;AR+教育,用事实加强技术模仿课堂教学环境、3D动画展现课本图书常识等,让学习更生动有趣…… 有奖调研,你来指引AR技术开发的前进方向 AR技术在将来有着广大的倒退和变质空间。HMS Core凋谢的AR Engine始终致力于助力开发者、合作伙伴打造全新的视觉体验和交互方式,帮忙利用更好地交融虚拟世界与事实世界。在能力优化倒退之路上,咱们须要更多业余视角和体验反馈,诚邀您参加AR开发平台性能场景和市场需求调研,一起摸索更多惊艳好用的AR性能! 奖项设置 一等奖(1名):HUAWEI WATCH GT 3(46mm)生机款(价值1588) 二等奖(2名):HUAWEI FreeBuds 4i 无线耳机(价值499) 三等奖(3名):华为路由AX2 Pro(价值229) 立刻扫码填写问卷 【问卷评奖规定】专家评审将从问卷反馈内容的业余度和价值度等角度进行评分,如合乎评比规定要求的回复有余时,奖项可空缺。 【隐衷申明】本次调研内容不会收集您任何的隐衷信息,您在回复内容时留神请勿波及第三方窃密信息。 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

July 18, 2022 · 1 min · jiezi

关于android:Shopee在React-Native-架构方面的探索

1. 背景React Native(下文简称 RN)是混合应用领域风行的跨端开发框架。RN 非常适合灵便多变的电商畛域业务,因为 RN 是基于客户端渲染的技术,所以相较于 H5 页面,它在用户体验方面有肯定劣势。 随同着 Shopee 业务的飞速发展,咱们 App 中的 RN 代码量增长得十分快,呈现了构建产物体积过大、部署工夫太长、不同团队依赖抵触等问题。为了应答这些痛点,咱们摸索了去中心化的 RN 架构,并联合该模型自研了零碎(Code Push Platform,简称 CPP)和客户端 SDK,笼罩了多团队的开发、构建、公布、运行等一系列 RN 研发周期。通过近三年的迭代,现已接入多款公司级外围 App。 Shopee 商家服务前端团队打造了多款商家端利用,大部分用户是商家服务人员,他们对业务零碎高可用和问题及时反馈有着很高的要求,从而也推动咱们对 React Native 的架构有了更高的要求。 本文会从倒退历史、架构模型、零碎设计、迁徙计划四个方向逐个介绍咱们如何一步步地满足多团队在简单业务中的开发需要。 2. 倒退历程随着业务高速倒退,咱们的 RN bundle 个数飞速减少,App 个数也达到近十个。整个 RN 我的项目在开发模型、部署模型和架构模型三个维度都产生了变动,从单团队倒退成多团队,从一个 bundle 倒退成多个 bundle,从中心化架构倒退成为去中心化,最终倒退成为每个团队的业务代码能够独立地开发、部署、运行。 整个倒退历史分为 4 个阶段,别离是单 bundle 集中开发模式、单 bundle 多业务组开发模式、多 bundle 中心化公布模式、多 bundle 去中心化公布模式。 2.1 第一阶段:单 bundle 集中开发模式最后的 RN 整体技术架构绝对简略。因为过后业务状态不算简单,为了满足独立团队在同一个代码仓库当中的开发流程,整个公布流程是基于 CDN 的更新公布,并且应用配置文件记录 RN bundle 文件的版本以及下载地址,以此进行资源管理。整个公布的产物有两个,一个是 RN 资源包,一个是用于资源版本治理的 JSON 配置文件。 ...

July 17, 2022 · 3 min · jiezi

关于android:高仿京东Android-App集成ReactNative热更功能

简介本我的项目是一个学习类型的我的项目,次要是为了学习一些Android最新的思路和开发思维,工程依照模块化、组件化的开发思路进行开发,我的项目整体构造如下图。 我的项目代码整洁标准,构造清晰,应用Android最新的开发思维和技术,同时集成React-Native跨平台,次要是为了试验热更性能,波及到的技术有如下一些: 应用kotlin语言开发,我的项目应用模块化开发,升高了耦合性;网络应用 retrofit2 + okhttp3形式,进行了高度的封装;leakcanary 内存透露检测基于MVI架构airbnb的Mavericks本地mockalibaba ARouter集成RN热更性能, 用户须要关上rn加载页面,rn工程请见体验Apk下载链接: Apk下载链接Apk二维码 局部成果如下: MVI架构因为没有明确的状态治理规范,随着应用程序的增长或增加性能或当时没有打算的性能,视图渲染和业务逻辑可能会变得有点凌乱,并且这种状况常常产生在Android利用开发过程中。可能你常常遇到状态治理导致业务逻辑和 UI 渲染的分工不明确,最终导致利用架构的凌乱。而新提出的MVI架构,提倡一种单向数据流的设计思维,非常适合数据驱动型的UI展现我的项目。MVI的架构思维来源于前端,因为Model、View和Intent三局部组成。 Model:与其余MVVM中的Model不同的是,MVI的Model次要指UI状态(State)。以后界面展现的内容无非就是UI状态的一个快照:例如数据加载过程、控件地位等都是一种UI状态View:与其余MVX中的View统一,可能是一个Activity、Fragment或者任意UI承载单元。MVI中的View通过订阅Intent的变动实现界面刷新(不是Activity的Intent、前面介绍)Intent:此Intent不是Activity的Intent,用户的任何操作都被包装成Intent后发送给Model进行数据申请用到的第三方库库性能retrofit2网络okHttp3网络mavericksMVI框架BaseRecyclerViewAdapterHelper万能适配器PhotoView图片预览ARouter组件化路由coil图片加载XPopup弹窗组件banner滚动图SmartRefreshLayout智能下拉刷新框架gsonjson解析leakcanary内存透露检测库附件:https://github.com/GuoguoDad/jd_mall

July 16, 2022 · 1 min · jiezi

关于android:做⼀个⾼德地图的-iOS-Android-MAUI-控件下

咱们曾经介绍了如何通过 .NET 绑定 iOS 原⽣库 ,本篇开始介绍⼀下如何通过 .NET 绑定 Android 原⽣库。 Android 的库Android 的库以 .jar 做打包, 通过⼯具你能够将多个 .jar 实现绑定,而后通过 C# 调⽤原⽣的 Java 库。对⽐起 iOS , Android 的库绑定简略很多。  从上图能够看到 Xamarin.Android / .NET for Android 通过使⽤托管可调⽤包装器 (MCW) 实现绑定。MCW 是⼀个 JNI 桥,在托管代码须要调⽤ Java 代码时会使⽤它。托管可调⽤包装器还⽀持对 Java 类型进⾏⼦类 化以及笼罩 Java 类型的虚构⽅法。同样,每当 Android 运⾏时 (ART) 代码须要调⽤托管代码时,它都会通 过另⼀个称为 Android 可调⽤包装器 (ACW) 的 JNI 桥来实现。 创立⼀个 Android 原⽣库绑定项⽬ 通过命令⾏创立⼀个 Android 原⽣库绑定项⽬d otnet new android-bindinglib -o Droid.AMap进⼊该项⽬咱们看看⽂件构造 项⽬⾥⾯有 Transforms ⽂件夹有对应的三个 xml ⽂件,别离是 EnumFields.xml ,EnumMethods.xml , Metadata.xml , 各⾃作⽤如下 : ...

July 16, 2022 · 4 min · jiezi

关于android:原创MagiskShamiko过APP-ROOT检测

本文所有教程及源码、软件仅为技术钻研。不波及计算机信息零碎性能的删除、批改、减少、烦扰,更不会影响计算机信息零碎的失常运行。不得将代码用于非法用处,如侵立删!**## Magisk+Shamiko过APP ROOT检测### 操作环境- nexus5x- Magisk24.3- Shamiko0.5.1### 筹备Magisk、Shamiko装置请参考之前文章,此文不再赘述刷入Magisk(面具root)Shamiko模块装置### 案例测试案例关上APP后进入首页弹窗提醒#### Magisk暗藏ROOT1.关上Magisk在设置中找到恪守排除列表并开启2.在设置中点击配置排除列表,在排除列表中找到须要暗藏ROOT的对应利用并开启 (将利用下的选项全副开启)3.重启手机,胜利绕过root检测此办法设置后尽管能够绕过root检测,然而此时排除列表中的利用是无奈应用虚构框架和模块的,这时就须要应用到Shamiko模块#### Shamiko模块暗藏root1.Shamiko模块刷入并开启2.Magisk在设置中找到恪守排除列表并敞开胜利暗藏root,并可失常应用虚构框架和模块 **## 资源下载https://download.csdn.net/download/qq_38154948/86110511**本文仅供学习交换应用,如侵立删!**

July 15, 2022 · 1 min · jiezi

关于android:HMS-Core图形图像技术展现最新功能和应用场景加速构建数智生活

【2022年7月15日,杭州】HUAWEI Developer Day(华为开发者日,简称HDD)杭州站拉开帷幕。在数字经济一直倒退的明天,开发者对图形图像的开发需要更加深刻和多样化,从虚拟环境重构到用户交互再到视觉出现,开发者对于数字世界存在一个残缺的需要链条。在HMS Core.Sparkle利用翻新分论坛中,HMS Core技术和产品专家与国内行业内开发者独特探讨图形技术的现状与利用,华为为开发者展现了最新的HMS Core 3D Engine性能、AR Engine在淘宝极有家的利用,VR Engine、3D建模服务等,独特摸索数字世界的挪动利用倒退之路。 构建三维数字世界的基石作为构建三维数字世界的基石,HMS Core 3D Engine提供了高性能、高画质、高扩展性的实时3D引擎,和便捷高效的可视化开发工具,帮忙开发者制作高品质的3D利用。 在3D渲染方面,反对实时全局光照、动静多光源,并提供景深、环境光遮蔽、抗锯齿等后处理性能,高度还原真切的光影成果;多维粒子系统反对CPU/GPU粒子渲染,可模仿爆炸、火焰、雨雪等等天然场景,及刀光剑影等特殊效果;实时骨骼动画、表情动画、动画重定向、多重动画状态机交融,可实现晦涩的3D动画成果。 3D Engine不仅能够助力制作卡通虚构数字人、手语写实数字人和虚构舞台效果,还和超图一起推出了全新的高保真三维GIS插件,通过3D渲染技术助力三维GIS实现更高清、更具真实感的数字世界场景。 通过3D Engine渲染的虚构舞台效果 实在与虚构无缝连接HMS Core在AR(加强事实)和VR(虚拟现实)上的技术深耕,也为数字世界的构建添砖加瓦。 HMS Core AR Engine提供虚实交融的要害算法,解决了坐标对立、场景对立、相机对立这3个问题,让虚构物体能够实景搁置。在静止跟踪、环境跟踪、人体和人脸跟踪等助力虚实交融的AR能力上,技术指标均有进步。淘宝极有家集成AR Engine后,领有了AR测量性能,利用高精度环境SLAM技术,手机扫描即可轻松构建屋宇环境。截止2022年6月,AR Engine已成为寰球TOP3挪动设施AR开发平台,有17亿次的装置量、2800+款的沉闷三方利用数、120+款已笼罩机型。 HMS Core VR Engine则和XR设施、Harmony OS、内容平台一起,打造XR世界生态根底。VR Engine是为华为VR内容开发者提供的平台,开发者应用华为VR SDK进行开发,开发实现后上传至华为VR利用商店,审核通过后领有华为VR眼镜的消费者即可间接购买下载利用内容。HUAWEI VR目前次要的硬件状态是VR眼镜加华为系列手机,VR眼镜连贯手机后,手机VR利用通过集成的VR Engine运行。比方,集成了VR Engine的华为VR Glass上市后屡获国内外大奖,用户通过一副眼镜即可连贯不同产品,并且还可跨平台反对手机、PC、云。 助力3D动画制作和手语无障碍沟通在3D动画制作方面,HMS Core 3D建模服务新凋谢了主动骨骼绑定性能,即基于AI技术,可为二足人形3D模型赋予静止能力。主动骨骼绑定性能有高度自动化、超强鲁棒性、优异的蒙皮成果等长处,如通过一般手机拍摄二足人形物体多张图像实现高精度建模;自动化骨骼绑定,无需人工干预,通过业界支流引擎,即可实现一键驱动。若3D建模服务联合AR,则能够解锁更多玩法,如让模型走入实在场景,将电子宠物带到你的沙发、床等中来。 在手语数字人方面,在加强手控动作的根底上,HMS Core手语服务赋予了手语数字人非手控特色,包含姿势、面部表情和口型,更加贴近真人手语动作,显著晋升了手语整体可懂度。以后,手语服务面向媒体内容制作、教育学习和日常交换等高频场景,凋谢了挪动端手语生成、文本转视频文件、手语直播等服务。 随着构建3D数字世界重要一环的图形技术的倒退,虚拟世界与事实世界之间的界线将逐步含糊,HMS Core助力各位开发者走好将来利用倒退之路,赋能更多利用走入数字世界,独特促成数字生态的凋敝。 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

July 15, 2022 · 1 min · jiezi

关于android:华为通用卡证识别功能一键实现多种卡绑定

目前很多利用都有身份证、银行卡一键辨认性能,但面对各种会员卡、通行证、驾驶证、行驶证等日常生活中常常用到的卡证,因为不同商家的卡号地位,版面款式各异,所以无奈应用相似身份证的专门的身份证辨认API,如果要在游览类App、商超类App等手动输出卡证号码,不仅繁琐还容易出错,没有很好的交互体验。此时,应用华为机器学习服务的通用卡证辨认能力就能很快解决。该能力会提供一个规范的通用卡证对准框,只需拉起对准框,就能够获取对准框内辨认到的卡证全部内容,再针对这些内容依照肯定的规定做要害信息提取,即可获取到本人想要的内容,比方间断的8位数字即为卡号,或者在某些非凡字母后的内容即为卡号内容。 1 业务简介通用卡证辨认服务基于文字辨认技术,提供通用的开发框架。针对港澳通行证、香港身份证、回乡证等任意固定版式的卡证,反对开发者自定义后处理逻辑获取所需信息。以后版本提供视频流、拍照和本地图片三种接口,并反对定制辨认界面,满足开发者多样化的应用场景。 DEMO演示 2 场景介绍华为通用卡证辨认范畴很广,当利用须要疾速实名认证、绑定证件信息时,只须要把图片、拍照、视频传给ML Kit,即可获取到对应的辨认内容,开发者须要依据本人的利用场景,针对辨认内容做肯定后处理即可提取出要辨认的卡证号内容。通过开发者的定制,能够反对港澳通行证、台湾通行证、驾驶证、行驶证、会员卡等多种卡证的结构化辨认,在一些须要进行证件信息采集的利用中能够应用该服务,不仅能够升高用户输出错误信息的概率,还能够晋升用户的交互体验。例如,用户在预约境外酒店、机票的游览场景中,能够疾速自动识别相干证件中的要害信息,实现高效录入。 3 性能特点多卡种反对: 任意固定板式的卡证,包含会员卡,通行证,工卡等。反对辨认的范畴和场景介于文本辨认和身份证、银行卡辨认之间,只有是卡证都能够进行辨认。 多角度辨认:反对30°歪斜辨认,45°蜿蜒文字辨认,现实状况下辨认准确率达到90%。 如何接入华为机器学习服务? 华为开发者联盟官网为您提供具体的文档领导。 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

July 15, 2022 · 1 min · jiezi

关于android:APP上架因收集个人信息问题被拒绝该怎么解决

近年来,随着信息技术的疾速倒退和挪动互联网利用的遍及,越来越多的利用大量收集、应用个人信息,给人们生存带来便当的同时,也呈现了对个人信息的非法收集、滥用、透露等问题,集体信息安全面临严重威胁。 2019年1月,地方网信办、工信部、公安部、市场监管总局四部门联结公布《对于发展App守法违规收集应用个人信息专项治理的布告》(以下简称《布告》)。为落实《布告》相干部署,受四部门委托,全国信息安全标准化技术委员会、中国消费者协会、中国互联网协会、中国网络空间平安协会成立App守法违规收集应用个人信息专项治理工作组(以下简称“App专项治理工作组”),具体推动App守法违规收集应用个人信息评估工作。 各利用市场审核力度也十分大,常常会呈现因收集个人信息利用上架被回绝的问题,上面看几个实例 ,回绝起因都怎么形容的: 利用宝: (1)超范围收集个人信息 问题1 :APP未见向用户告知且未经用户批准,在某些性能中,存在收集通讯录、短信、通话记录、相机等信息的行为,非服务所必须且无正当利用场景,超出与收集个人信息时所宣称的目标具备间接或正当关联的范畴。 问题2 :APP在运行时,未见向用户告知且未经用户批准,存在每30s读取一次地位信息,非服务所必须且无正当利用场景,超出实现产品或服务的业务性能所必须的最低频率。 问题3 :APP未见向用户告知且未经用户批准,在静默状态下或在后盾运行时,存在收集通讯录、短信、通话记录、相机等信息的行为,非服务所必须且无正当利用场景,超出与收集个人信息时所宣称的目标具备间接或正当关联的范畴。 问题4 :APP未见向用户告知且未经用户批准,在静默状态下或在后盾运行时,存在依照肯定频次收集地位信息、IMEI、通讯录、短信、图片等信息的行为,非服务所必须且无正当利用) (2)APP频繁自启动和关联启动。 问题1 :APP未向用户明示未经用户批准,且无正当的应用场景,存在频繁自启动或关联启动的行为。 问题2 :APP尽管有向用户明示并经用户批准环节,但频繁自启动或关联启动产生在用户批准前。 问题3:APP非服务所必须或无正当利用场景,超范围频繁自启动或关联启动第三方APP。 华为利用市场: 怎么解决呢? 1. APP首次启动肯定要先弹出《隐衷政策》、《用户协定》,并提供批准或回绝按钮,等用户批准后,再初始化第三方sdk (地图、推送等),这些第三方服务通常会波及到收集个人信息。用户批准前,不能触发任何收集个人信息的代码。 2. APP 隐衷政策要清晰形容所有用到的个人信息的场景和目标。用到的第三方sdk 能够到第三方官网查看他们的隐衷协定。 参考文档: APP开发合规指南 隐衷政策提示框的快捷实现

July 15, 2022 · 1 min · jiezi

关于android:Room又要写业务代码了看看我吧给你飞一般的感觉

前言:在咱们日常开发中,常常要和数据打交道,所以存储数据是很重要的事。Android从最开始应用SQLite作为数据库存储数据,再到许多的开源的数据库,例如QRMLite,DBFlow,郭霖大佬开发的Litepal等等,都是为了不便SQLite的应用而呈现的,因为SQLite的应用繁琐且容易出错。Google当然也意识到了SQLite的一些问题,于是在Jetpack组件中推出了Room,实质上Room也是在SQLite上提供了一层封装。因为它官网组件的身份,和良好的开发体验,当初逐步成为了最支流的数据库ORM框架。Room官网文档:https://developer.android.goo... SQL语法教程:https://www.runoob.com/sqlite... 本文代码地址:https://github.com/taxze6/Jet... 为什么要应用Room?Room具备什么劣势?Room在SQLite上提供了一个形象层,以便在充分利用SQLite的弱小性能的同时,可能享有更健壮的数据库拜访机制。 Room的具体劣势: 有能够最大限度缩小反复和容易出错的样板代码的注解简化了数据库迁徙门路针对编译期SQL的语法查看API设计敌对,更容易上手,了解与SQL语句的应用更加贴近,可能升高学习老本对RxJava、 LiveData 、 Kotlin协程等都反对Room具备三个次要模块Entity: Entity用来示意数据库中的一个表。须要应用@Entity(tableName = "XXX")注解,其中的参数为表名。Dao: 数据库拜访对象,用于拜访和治理数据(增删改查)。在应用时须要@DAO注解Database: 它作为数据库持有者,用@Database注解和Room Database扩大的类如何应用Room呢?①增加依赖最近更新工夫(文章公布时的最新版本)稳定版Alpha 版2022 年 6 月 1 日2.4.22.5.0-alpha02plugins {   ...    id 'kotlin-kapt'}def room_version = "2.4.2"implementation "androidx.room:room-runtime:$room_version"annotationProcessor "androidx.room:room-compiler:$room_version"kapt 'androidx.room:room-compiler:$room_version'②创立Entity实体类,用来示意数据库中的一张表(table)@Entity(tableName = "user")data class UserEntity(    //主键定义须要用到@PrimaryKey(autoGenerate = true)注解,autoGenerate参数决定是否自增长    @PrimaryKey(autoGenerate = true) val id:Int = 0, //默认值为0    @ColumnInfo(name = "name", typeAffinity = ColumnInfo.TEXT) val name:String?,    @ColumnInfo(name = "age", typeAffinity = ColumnInfo.INTEGER) val age:Int?)其中,每个表的字段都要加上@ColumnInfo(name = "xxx", typeAffinity = ColumnInfo.xxx),name属性示意这张表中的字段名,typeAffinity示意改字段的数据类型。 ...

July 15, 2022 · 9 min · jiezi

关于android:在登录欢迎栏弹出之前将游戏切到后台弹出欢迎栏之后再切回到游戏华为防沉迷弹窗不出现可直接进入游戏

问题形容咱们游戏集成了华为游戏防沉迷性能,提交审核,被驳回:“您的游戏未限度向未成年提供服务的工夫”。 咱们游戏是设置主动登录的,即进入游戏被动调用一次华为登录接口,登录胜利后间接进入游戏。我本人测试防沉迷是失效的,即未成年人帐号登录胜利后,能够弹出防沉迷弹窗,此时能够拦截未成年玩家进入游戏。 在华为经营的疏导下,找到审核提供具体的复现场景: 在互动核心进行反馈,注明您的问题及需要即可。 反馈入口:登陆AGC-所有页面右上角小铃铛处。 审核测试步骤是,进入游戏时,在登录欢送栏弹出之前(或者防沉迷弹窗弹出之前),将游戏切到后盾,在手机界面上弹出华为登录欢送栏之后,再切回到游戏,此时界面上没有华为防沉迷弹窗,而是间接进入游戏了,像是切后盾的时候把那个防沉迷弹窗给卡掉了,以至绕过防沉迷。 问题剖析我先依照华为官网文档查看咱们的代码是否有破绽,集成防沉迷须要留神以下几点: 在初始化接口中注册实现防沉迷回调OnExit();登录胜利后调用getCurrentPlayer/getGamePlayer接口获取玩家信息,否则防沉迷不失效。 查看代码,以上两点都符合要求。 而后代码调测发现,切后盾场景下,不弹出防沉迷弹窗,没方法走到初始化时注册好的退出游戏的逻辑,以至防沉迷无奈拦挡未成年进入游戏。 分割华为技术反对(可提单分割)帮忙解决问题。技术回复,游戏切到后盾,此时因为曾经获取不到activity,所以无奈拉起防沉迷弹窗,不能再通过弹窗管制玩家退出游戏了。 华为要求,在调用登录接口(silentSignIn或signInIntent)胜利后,要调用getCurrentPlayer/getGamePlayer接口获取玩家信息playerID/openID,获取胜利后,才可进入游戏。在审核测试的场景下,切换前后台操作,调用getCurrentPlayer/getGamePlayer接口,是拿不到playId/openId的,游戏要禁止玩家进入。 总结就是:管制玩家进入游戏,是要通过是否获取到playId/openId来判断,而不是仅根据防沉迷弹框。 问题解决依据技术回复,咱们在getCurrentPlayer接口失败回调中提醒用户获取玩家信息失败,并增加禁止玩家进入游戏的逻辑,问题解决。

July 14, 2022 · 1 min · jiezi

关于android:HMS-Core安全检测服务如何帮助大学新生防范电信诈骗

一年一度的高考完结了,很多学生行将来到父母,一个人踏入大学生存,但因为人生经历较少,容易被不法分子盯上。 每年开学季也是大一新生蒙受欺骗的高峰期,以下是一些常见的案例。有的骗子会让新生下载注册一些歹意金融利用这些利用可能蕴含有病毒、木马等程序,也可能是仿冒某些出名软件的利用,犯罪分子通过歹意利用便可盗取手机里的银行卡等集体敏感数据。还有欺骗人员以赠送小礼物或优惠券作为钓饵,疏导学生扫码填写个人信息,大一新生往往警觉性较低,人不知;鬼不觉中就将电话、住址等信息泄露进来,随之而来的便是狂轰滥炸的垃圾电话和短信,若是扫描了含有钓鱼网站链接的二维码,可能会进一步造成隐衷数据泄露。更有的犯罪分子打着助学金的名号,让贫困学生登录钓鱼网站填写银行卡明码等,间接造成学生的财产损失。 面对层出不穷的骗术,App须要及时检测出钓鱼网站、歹意利用、危险网络环境等,通过利用内提醒引起用户的器重,保障用户的信息安全。那么,有没有什么方法可能多维度加强利用平安能力呢?作为App的开发者,能够为利用集成华为HMS Core 平安检测服务,疾速构建利用平安能力,爱护学生的个人信息和财产平安,为大一新生步入高校之旅保驾护航。 HMS Core的平安检测服务利用平安检测能力能够帮忙App开发者获取所运行设施上的歹意利用列表。对于携带病毒的利用,检测率高达99%,同时还领有基于行为检测未知威逼的能力。App可依据检测后果,决定是否限度用户在App内领取等操作。 HMS Core的平安检测服务歹意URL检测能力能够判断用户拜访的URL是否为歹意网址,对于歹意网址,抉择提醒或拦挡用户的拜访危险。 HMS Core的平安检测服务歹意Wi-Fi检测能力检测尝试连贯的Wi-Fi及路由器特色,剖析以后尝试拜访的网络状况,实时反馈Wi-Fi检测后果,当利用获取尝试连贯的Wi-Fi存在ARP攻打、中间人攻打、DNS劫持等攻打时,能够阻断操作或者进一步让用户认证确认,帮忙防备来自歹意Wi-Fi的歹意行为攻打。 HMS Core平安检测服务还领有零碎完整性检测、虚伪用户检测能力,可能帮忙开发者疾速晋升利用安全性,集成过程简略高效,上面是具体的接入教程。 Demo演示 利用平安检测 歹意URL检测 歹意Wi-Fi检测 开发步骤1 开发筹备具体筹备步骤可参考华为开发者联盟官网。 2 利用平安检测API2.1 调用AppsCheck API您可间接调用SafetyDetectClient的getMaliciousAppsList获取歹意利用列表: private void invokeGetMaliciousApps() { SafetyDetectClient appsCheckClient = SafetyDetect.getClient(MainActivity.this); Task task = appsCheckClient.getMaliciousAppsList(); task.addOnSuccessListener(new OnSuccessListener<MaliciousAppsListResp>() { @Override public void onSuccess(MaliciousAppsListResp maliciousAppsListResp) { // Indicates that communication with the service was successful. // Use resp.getMaliciousApps() to get malicious apps data. List<MaliciousAppsData> appsDataList = maliciousAppsListResp.getMaliciousAppsList(); // Indicates get malicious apps was successful. if(maliciousAppsListResp.getRtnCode() == CommonCode.OK) { if (appsDataList.isEmpty()) { // Indicates there are no known malicious apps. Log.i(TAG, "There are no known potentially malicious apps installed."); } else { Log.i(TAG, "Potentially malicious apps are installed!"); for (MaliciousAppsData maliciousApp : appsDataList) { Log.i(TAG, "Information about a malicious app:"); // Use getApkPackageName() to get APK name of malicious app. Log.i(TAG, "APK: " + maliciousApp.getApkPackageName()); // Use getApkSha256() to get APK sha256 of malicious app. Log.i(TAG, "SHA-256: " + maliciousApp.getApkSha256()); // Use getApkCategory() to get category of malicious app. // Categories are defined in AppsCheckConstants Log.i(TAG, "Category: " + maliciousApp.getApkCategory()); } } }else{ Log.e(TAG,"getMaliciousAppsList failed: "+maliciousAppsListResp.getErrorReason()); } } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { // An error occurred while communicating with the service. if (e instanceof ApiException) { // An error with the HMS API contains some // additional details. ApiException apiException = (ApiException) e; // You can retrieve the status code using the apiException.getStatusCode() method. Log.e(TAG, "Error: " + SafetyDetectStatusCodes.getStatusCodeString(apiException.getStatusCode()) + ": " + apiException.getStatusMessage()); } else { // A different, unknown type of error occurred. Log.e(TAG, "ERROR: " + e.getMessage()); } } }); }3 歹意URL检测API3.1 初始化URLCheck API在应用URLCheck API前,必须调用initUrlCheck办法进行接口初始化,并且须要期待初始化实现后再进行接下来的接口调用,示例代码如下: ...

July 14, 2022 · 3 min · jiezi

关于android:原创Magisk-Root隐藏模块-Shamiko安装

本文所有教程及源码、软件仅为技术钻研。不波及计算机信息零碎性能的删除、批改、减少、烦扰,更不会影响计算机信息零碎的失常运行。不得将代码用于非法用处,如侵立删!**## Root暗藏模块 Shamiko装置### 操作环境- google nexus 5x - Magisk24.3- Shamiko0.5.1Magisk 刷入流程可参考之前文章,此文不在赘述google nexus5x 刷机抓包逆向环境配置(一)google nexus5x 刷机抓包逆向环境配置(二)google nexus5x 刷机抓包逆向环境配置(三)### Shamiko刷入1.下载Shamiko并上传至手机目录:adb push Shamiko-v0.5.1-115-release.zip /sdcard/2.Magisk的模块性能中应用本地装置刷入Shamiko3.Magisk的设置中敞开恪守排除列表4.回到模块性能此时Shamiko中显示Shamiko is working as blacklist mode **## 资源下载https://download.csdn.net/download/qq_38154948/86110511**本文仅供学习交换应用,如侵立删!**

July 13, 2022 · 1 min · jiezi

关于android:华为应用强制更新中偶现点击退出应用退不出应用

问题形容咱们游戏集成了6.2.0.300版本的游戏sdk后,后盾提交更新包并勾选了“强制更新”选项,新包上线后,在测试游戏强制降级性能时,发现偶现的点击“退出利用”退不出游戏,查看日志发现最初一次点击按钮, 降级sdk中isExit 字段返回的false,所以狐疑是不是sdk的问题。 问题剖析带着疑难分割华为技术反对(可提单分割),技术支持复现问题后,发现最初一次点击“退出利用”按钮,并没有进入降级的回调,而isExit字段返回的false,还是上一次弹降级弹窗返回的,本次点击按钮并没有打印日志,所以导致我误以为是isExit字段返回false导致的没有退出游戏。 技术支持剖析之所以没有退出游戏,是因为我的降级代码是这么写的:因为callback放在了局部变量中,很容易被回收,所以会偶现收不到回调。 问题解决解决的办法就是把callback放到成员变量里,如下图所示: 改完之后,问题解决。

July 13, 2022 · 1 min · jiezi

关于android:买量洞察与渠道评估助力营销决策优化

耗时繁冗的归因监测如何减负增效?怎么正当评估不同拉新渠道的用户品质?相似问题置信每一个挪动互联网App推广人都会一直问本人,但却始终找不到适合的办法从本源解决。广告互动行为与用户利用内行为的割裂,是妨碍广告成果掂量与晋升的较大难点。那么如何解决这个难点呢?剖析服务基于渠道评估和买量洞察,给出了以下解决方案。 广告互动与行为数据无缝连接,全链路营销成果监测通过HMS Core剖析服务,您能够轻松配置需回传至HUAWEI Ads的深度转化事件,如“App激活、注册、加购、付费、留存、复购、评分、分享、搜寻”等,实现由“曝光”到“付费”的全链路监测,通过比照不同营销工作的转化成果及时调整投放策略。同时,HUAWEI Ads通过模型学习深度转化数据,可动静优化投放算法,进步人群定向精准度,帮忙广告主获取更多留存率高、付费率高的高质量用户,晋升后端ROI。 买量用户精确辨认,掂量渠道拉新规模与品质流量老本日益攀升的当下,广告投放成果的晋升不再繁多取决于谁投的钱多,而在于是否通过精细化的买量来最大化买量效率以及晋升引流的规模与品质。 通过UTM 参数标记,能够在HMS Core剖析服务轻松辨别买量用户与天然量用户,对不同营销渠道、营销媒介、营销工作带来的用户及其后续行为进行比照剖析,辨认更有价值的营销渠道、转化成果更好的投放素材。 您也能够联合营销归因,剖析各营销渠道或营销工作对指标转化事件的贡献率,进一步掂量不同渠道或营销工作的转化成果。 除此之外,HMS Core剖析服务还提供了十余种分析模型,反对对各个营销渠道、媒介、营销工作引流的用户开展多维分析,为买量的策略优化提供无效参考,以最小老本实现最大买量收益。 以上是联合HMS Core剖析服务进一步晋升广告投放成果的简略介绍,欲了解其余精益经营场景,使可通过拜访官网理解更多。即刻集成,体验更优质的广告投放体验! 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

July 13, 2022 · 1 min · jiezi

关于android:HMS-Core音频编辑服务支持7种音频特效助力一站式音频处理

多媒体时代,音频作为内容流传中的重要模式,因其不受空间限度、认知累赘小、声音元素多样化等特点,广泛应用于短视频制作、儿童在线教育、有声浏览、游戏等畛域产品,在各种模式的音频出现过程中,正当增加音效可能带给用户更具气氛感的沉迷式声音体验。HMS Core音频编辑服务为助力寰球开发者疾速构建各类利用音频能力,提供了变声、均衡器、增加音效、环境成果、声场、音乐风格、淡入淡出等多种特效性能,可供开发者依据本人的需要增加应用。 变声变声性能罕用于直播类、音视频和社交类利用,用户不想曝光本来声音,或者想削减音频互动的趣味性,都能够对本来人声增加变声特效。目前音频编辑服务反对的变声特效包含大叔、萝莉、男生、女声、怪兽、卡通、机器人在内的7种变声成果,可实时处理音频,且不限语种。可利用于音视频通信、直播以及短视频制作等场景,在无效爱护用户隐衷的同时,可能带来更丰盛乏味的声音成果。 均衡器均衡器的根本作用是通过对声音某一个或多个频段进行增益或衰减,从而达到调整音色的目标。音频编辑服务的均衡器性能基于用户应用需要,提供了广受欢迎的风行、古典、摇滚、重低音、爵士、R&B、民谣、舞曲、中国风9种预置格调,并反对自定义调节,用户能够自行调节10段频段的增益,助力开发者在音视频剪辑及音乐播放类App中高效构建均衡器性能,实现定制化音频播放成果,晋升音频创作的可玩性。 增加音效音效指的是由声音所制作的成果,是人工制作或增强的声音,用来加强对电影、电子游戏、音乐或其余媒体艺术或其余内容的声音解决。在音视频编辑过程中,正当的音效增加能够起到强化作品沉迷感、及时反馈作品中的事件信息转折、营造气氛和情绪等作用,晋升作品的体现品质和娱乐交互性,是强化画面感的无效利器。 音频编辑服务提供的音频素材库性能目前反对动物、交通、电话铃声、科幻、打斗、环境音、乐器、生存、人声、转场在内的10种音效类别,共计上百个音效素材,可供开发者收费集成应用,反对各种场景的利用编辑。 环境成果环境成果指的是声音在不同环境中所产生的音频成果,音频编辑服务利用不同的演算形式,将声音模仿成不同环境中的成果,目前反对播送、电话听筒、水下、黑胶唱片4种音效,可营造出趋于实在的环境声音,使得用户可能疾速沉迷游戏或故事的剧情之中。音频编辑服务提供的环境成果性能,不仅可利用于音乐类利用,还可利用在游戏音效或有声书场景,通过声音给用户带来身临其境的真实感。 声场声场是指媒质中有声波存在的区域,前、后、高、低不同地位的声场合呈现出的音乐成果是不同的。音频编辑服务的声场功能设计了凝听、广阔、前置、巨大4种模式,交融了空间混响和音频声向的预置属性。“凝听”模式:适宜听细腻的民谣;“前置”模式:适宜听一些纯乐曲;“广阔”模式:适宜听摇滚、说唱等高音丰盛且现场感强的音乐;“巨大”模式:适宜听交响乐。在音视频频制作或音乐播放场景,可依据不同的音乐适配对应的声场成果,让音乐更难听。 音乐风格音乐风格即曲风,是指在音乐领域中各种音乐因素富裕共性的组合形式,音乐因素包含曲调、节奏、音色、力度等,通过对这些因素的非凡联合形式,可能产生一种独特的或显著的音乐风格。音频编辑服务的音乐风格反对重低音特效,可在制作或播放音频时突出音乐的节奏感,让声音档次体现更加丰盛。 淡入淡出“淡入”指的是音频从静音状态突变到原始音量,比方在视频中插入一段音乐,音乐音量会逐步缓缓增大,不会显得突兀,引起听者不适。相同,“淡出”指的是音频从原始音量突变到静音的状态,当音乐靠近序幕时,能够平滑适度,切入到下一个音频内容,起到正当的音频连接成果。音频编辑服务提供的淡入淡出性能,可广泛应用于歌曲串烧、音视频制作等场景,为用户带来更舒服的音乐视听体验。 除了以上音频成果能力,HMS Core音频编辑服务还提供音频根底编辑(导入、宰割、复制、删除、音频提取等)、音频3D渲染(音源拆散、空间音频渲染)以及AI配音等丰盛的音频解决能力,全方位满足音视频开发者的需要,打造易用且安全可靠的音频编辑工具。 欲了解HMS Core音频编辑服务更多相干能力,点击拜访官网、领导文档。 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

July 12, 2022 · 1 min · jiezi

关于android:封装-avm-组件经验分享

avm.js 是一个跨端开发框架,AVM(Application-View-Model)前端组件化开发模式基于规范Web Components组件化思维,提供蕴含虚构DOM和Runtime的编程框架avm.js以及多端对立编译工具,齐全兼容Web Components规范,同时兼容Vue和React语法糖编写代码,编译工具将Vue和React相干语法糖编译转换为avm.js代码。 有Vue和React 开发教训的很容易上手。 1. 组件的定义和援用:     1.1 应用stml定义一个组件 / 页面stml组件兼容Vue单文件组件(SFC)标准,应用语义化的Html模板及对象化js格调定义组件或页面。stml最终被编译为JS组件 / 页面,渲染到不同终端。 定义组件: // api-test.stml:<template> <view class='header'> <text>{this.data.title}</text> </view> </template> <script> export default { name: 'api-test', data(){ return { title: 'Hello APP' } } }</script><style scoped> .header{ height: 45px; }</style>  1.2 组件援用:// app-index.stml:<template> <view class="app"> <img src="./assets/logo.png" /> <api-test></api-test> </view> </template><script> import './components/api-test.stml' export default { name: 'app-index', data: function () { return { title: 'Hello APP' } } } </script> <style> .app { text-align: center; margin-top: 60px; } </style>2. 向子组件传值向子组件传值采纳 props 的形式,这里以一个示例来进行阐明。 ...

July 11, 2022 · 3 min · jiezi

关于android:虚实相生构建数智生活HMS-Core-Sparkle应用创新分论坛报名启动

XR技术的倒退,为用户带来了全新的体验模式。那么,作为撑持XR倒退次要学科之一的图形学,将迎来哪些倒退新机遇?挪动利用开发者,该如何拥抱3D数字化转型? 7月15日,HDD·HMS Core. Sparkle利用翻新分论坛将邀请图形畛域学者、分析师、技术和产品专家,独特探讨图形技术的倒退现状和趋势,聚焦元宇宙、数字人、虚拟现实等热门话题和技术,共话虚构与事实一直交融之下的将来利用倒退之路。 什么是【HMS Core. Sparkle】?HMS Core . Sparkle翻新沙龙,围绕各畛域的挪动利用开发的翻新解决方案,及HMS Core差异化的能力开展,为开发者提供摸索交换的平台,洞察挪动利用发展趋势,使能开发者利用开发、用户增长及商业胜利。 本期看点趋势解读:艾瑞分析师带来2022技术发展趋势洞察,助力开掘行业增长新驱动力 大咖论道:圆桌论坛探讨图形技术数字化经营和虚实交融之下的利用将来倒退之路 技术赋能:HMS Core翻新图形能力:实时3D渲染、3D建模、AR /VR虚实联合、手语数字人等技术,使能开发者构建翻新利用 教训分享:原力数字、淘宝等案例,现场实践经验分享 流动议程 报名形式 形式1:登录华为开发者联盟官网>点击【流动】>进入【HDD·杭州站】流动报名页即可报名 本次流动也将在各大线上直播平台同步直播。感谢您对HDD·HMS Core. Sparkle利用翻新分论坛的关注与反对! 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

July 11, 2022 · 1 min · jiezi

关于android:线程开的越多就越好吗|趣谈线程池

前言线程优化始终是启动优化中的一个必不可少的我的项目。作为一个 Android 程序员,你必定心愿利用启动的时候,火力全开,线程池拉满,每一个 CPU 外围满载而行。 可你把线程池拉满的时候,启动时长就肯定会升高吗? 后果显然是否定的,之前我在进行启动优化的时候,就遇到了相似的问题。我引入了有向无环图相似的启动库后,又将线程池的数量设置为: CPU外围数 * 2 + 1看似没什么问题,后续启动时长竟然还增长了一点点。 为什么会呈现这样的问题?咱们明天就好好聊聊。 一、做个试验先做个试验,在利用启动过程中,次要做了两步: 主线程循环 10w 次,做一些简略的计算线程池做一些异步工作,读取文件,而后将读取到的数据写入数据库,这个异步工作提交了 1000 次外围线程数 = 2 * CPU 外围数 + 1,变量最大线程数: 试验一:最大线程数 = 2 * CPU 外围数 + 1试验二:最大线程数 = Int.MAX_VALUE在模拟器上,试验二均匀启动时长 6505 ms,试验一均匀启动市场 5521 ms,从这点看,线程开太多对主线程是有影响的。 二、基础知识在启动流程中基础知识必不可少,从上往下讲就是线程、线程池、内核 和 CPU,这些常识都是陈词滥调了。 1. 线程线程是操作系统进行运算调度的最小单位,能够了解为它就是零碎执行的工作。 作为工作,它会有各种状态: NEW(新建):新创建的线程,还没有启动RUNNABLE(可运行):能够运行的线程BLOCKED(阻塞):阻塞状态的线程WAITTING(期待):期待状态TIME_WAITTING(计时期待)TERMINATED(终止)各种状态能够进行如下转换: 处于可运行状态的线程不肯定处于运行中,如果 CPU 外围数 < 线程数量,在某个工夫点,处于运行中的线程数量最多也只能等于 CPU 外围数。 除此以外,只有处于可运行状态的线程才有机会获取 CPU 的青眼,从而分到工夫片,得以执行。 2. 线程池线程池的常识都很相熟了,简略理解一下。 2.1 外围线程简略来说,咱们想理解的局部就是线程池的外围线程和非核心线程: 外围线程:外围线程会始终存在非核心线程:当非核心线程闲置超过指定的工夫,就会被销毁通过配置适合的外围线程数和非核心线程数能够帮忙咱们治理好线程,能够带来以下益处: 升高资源耗费:反复利用线程,升高资源耗费提供响应速度:工作一来就执行治理好线程资源:防止无节制的应用线程,引发性能问题除此以外,在配置外围线程数和非核心线程数的时候,还须要依据业务场景,将 CPU 密集型和 I/O 密集型工作思考进去。 ...

July 10, 2022 · 2 min · jiezi

关于android:报名启动丨HMS-Core-Sparkle应用创新论坛

图形畛域将迎来哪些技术新进展?时下热门的3D、AR/VR和数字人等翻新技术又会给利用开发带来哪些新的启发?以上问题,将在7月15日HMS Core. Sparkle利用翻新论坛揭晓,赶快点击链接报名参会吧。 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

July 8, 2022 · 1 min · jiezi

关于android:中文主播也能海外带货同声传译助直播类应用开拓海外市场

互联网时代下,网络直播带货流量数据暴发显著,许多app的出海同时开辟了后劲微小的海内网购市场,进行跨境电商直播既能够刺激商品生产,又能够把中国文化带向世界。但目前跨境直播带货的问题在于语言问题,很多外国网友并不能听懂中文主播所讲的内容,要兼备外语与带货能力的主播又十分稀缺。 HMS Core机器学习服务提供的一项全新能力——同声传译就能够很好得解决跨境电商直播语言不通的难题,让中文主播也能海内带货,帮忙直播类利用开辟海内市场。HMS Core同声传译涵盖了机器学习服务的语音辨认、翻译、语音合成等核心技术,首先把输出的实时语音转换成文字,而后再把文字翻译成另一种语言的文字,最初把翻译后的文字转换成语音播放。同声传译能力可能帮助解决多种场景下的跨语言实时交换,反对中英文互译,提供多种音色语音播报,能够广泛应用于畛域多样、环境简单、实时性高的会议、直播等场景。 语音辨认+机器翻译,兼具品质与效率对于同声传译而言,精确的源语言输出+译文输入是其重要的衡量标准。而在面对同声传译次要的场景——大会演讲、字幕直播、会议访谈、智慧教育……往往随同长时间继续输出的音频,端侧辨认通过语音能量检测、静音检测、心跳检测等算法,实现长音频的无效断句,从而将无效语音片段送到语音辨认模块,晋升了语音辨认的效率,同时放大了同声传译时延,升高噪声对辨认成果的影响。 另一方面,在语音转成文本后,存在局部辨认谬误、口语化表白、语气词较多、局部内容反复表白等导致文本不流畅以及辨认文本并未进行粗疏断句的问题。针对这些情况,机器学习服务在文本处理模块采纳NLP语义了解、同音歧义解决、环境声音解决、口语化解决等纠错技术,来实现文本顺滑、主动断句等性能,确保返回高质量的翻译文本,从而实现语音辨认和翻译性能增强,晋升同声传译成果。 多种场景全笼罩,中英字幕双语输入同声传译既能利用在面对面跨语言交换场景,也能在近程沟通中发挥作用。无论是面对面多语种会议、近程会议、还是观看外语视频,同声传译能力能够实时生成双语字幕,升高了解老本,晋升工作与学习效率。 定制化语音播报,边听边看两不误同声传译能力通过先进的深度神经合成技术,可能实时输入音频流数据,同时提供多种中、英文男、女音色可选,以及可通过调整音量、语速(中英文反对5倍调节)从而使发音达到更加实在天然的成果。通过实时语音播报升高提早,联合实时字幕内容,为参会者提供视听一体的沉迷式同声传译体验。 通过对语音辨认、机器翻译、语音合成三项技术的有机整合,HMS Core机器学习服务为开发者提供较低时延、较高准确率的同声传译能力,帮忙用户更顺畅地进行国际交流,打造同声传译新“声”态。欢送开发者拜访机器学习服务官网,理解更具体的产品介绍与接入筹备。 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

July 8, 2022 · 1 min · jiezi

关于android:华为游戏多媒体调用获取Token接口得到的Token值是null

问题形容新版本的华为游戏多媒体SDK能够传入参数cpAccessToken进行SDK的初始化操作,以后咱们没有搭建服务器,间接在Android客户端调用了获取Token的接口,后果获取到的Token值是null。 参考文档: 获取TokenSDK初始化问题剖析运行代码没有报任何谬误,调用接口也没有打印任何谬误日志,只有用断点调试的形式来查看到底是哪行代码产生了异样。调试发现是上面这行代码产生了 NetworkOnMainThreadException异样,间接跳转到了catch代码段,意思是在主线程拜访了网络。 在Android中网络拜访必须放在子线程,如果在主线程呈现拜访网络的操作,就会产生此异样。 问题解决把接口放在子线程来调用,胜利获取到Token的值。(如何在子线程调用接口以及子线程与主线程如何通信,属于Android基础知识,此处就不再赘述。)如果上述办法不能解决您的问题,您能够通过提单的形式获取华为的技术支持。

July 7, 2022 · 1 min · jiezi

关于android:绕过frida特征检测

本文配合大佬编译的去特色版frida应用https://github.com/hzzheyang/strongR-frida-android下载server-启动形式与失常server统一应用大佬编译好的去特色frida配合这个frida脚本spawn启动,不保障对每个app无效function fridaCheckPass() { var pfn_strstr = Module.findExportByName("libc.so", "strstr"); Interceptor.attach(pfn_strstr, { onEnter: function (args) { var str1 = Memory.readCString(args[0]); var str2 = Memory.readCString(args[1]); if (str2.indexOf("tmp") !== -1 || str2.indexOf("frida") !== -1 || str2.indexOf("gdbus") !== -1 || str2.indexOf("gum-js-loop") !== -1 || str2.indexOf("gmain") !== -1 || str2.indexOf("linjector") !== -1 ) { console.log("str1:%s - str2:%s\n", str1, str2); this.hook = true; } }, onLeave: function (retval) { if (this.hook) { retval.replace(0); } } });}启动形式frida -U --no-pause -f com.xxx.xxx -l hook.js

July 7, 2022 · 1 min · jiezi

关于android:Navigation-这么好用的导航框架你确定不来看看

前言什么是Navigation?官网文档的话有点不容易让人了解。所以,这里用我本人的话来总结一下,咱们在解决Fragment是须要通过写Fragment的事务去操作Fragment的,而Navigation的呈现是为了解决咱们之前开发的一些痛点。Navigation次要用于实现Fragment代替Activity的页面导航性能,让Fragment可能轻松的实现跳转与传递参数,咱们能够通过应用Navigation,让Fragment代替android我的项目中绝大多数的Activity。但须要留神的是在应用Navigation切换页面生命周期的变动状况,防止开发过程中踩坑。官网文档:https://developer.android.goo... navigation我的项目地址:https://github.com/googlecode... 本文Demo地址:https://github.com/taxze6/Jet... 应用Navigation具备什么劣势?解决Fragment事务默认状况下,能正确处理往返操作为动画和转换提供标准化资源实现和解决深层链接包含导航界面模式,例如抽屉式导航栏和底部导航,咱们只须要实现大量的代码编写Safe Args - 可在指标之间导航和传递数据时提供类型平安的Gradle插件ViewModel反对 - 您能够将ViewModel的范畴限定为导航图,以在图标的指标之间共享与界面相干的数据如何应用Navigation呢?Navigation目前仅AndroidStudio 3.2以上版本反对,如果您的版本有余3.2,请点此下载最新版AndroidStudio(2202年了应该没有人还在用3.2以下的版本吧!)在开始学习Navigation组件之前,咱们须要先对Navigation次要组成部分有个简略的理解,Navigation由三局部组成: Navigation graph:一个蕴含所有导航相干信息的 XML 资源NavHostFragment:一种非凡的Fragment,用于承载导航内容的容器NavController:治理利用导航的对象,实现Fragment之间的跳转等操作上面咱们正式开始学习Navigation啦 第一步:增加依赖//project的Navigation依赖设置dependencies { //文章公布时的最新稳固版本: def nav_version = "2.4.2" // 应用java作为开发语言增加上面两行: implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Kotlin: implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" implementation "androidx.navigation:navigation-ui-ktx:$nav_version"}//Compose版本:implementation "androidx.navigation:navigation-compose:$nav_version"第二步:创立导航图①右键点击res目录,而后顺次抉择New→ Android Resource Directory。此时零碎会显示 New Resource Directory对话框。Directory name输出你的文件夹名(个别为navigation),Resource type抉择navigation ②右键navigation文件夹,而后new →Navigation Resource File在File name中输出名称(罕用nav_graph_main或nav_graph) 第三步:创立Fragment为了让跳转更加的丰盛,咱们这里创立三个Fragment✔咱们能够本人手动创立: FirstFragment: <?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".FirstFragment">    <TextView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:gravity="center"        android:text="hello world" /></FrameLayout>class FirstFragment : Fragment() {    override fun onCreateView(        inflater: LayoutInflater, container: ViewGroup?,        savedInstanceState: Bundle?   ): View? {        return inflater.inflate(R.layout.fragment_first, container, false)   }}另外创立两个和FirstFragement一样的:SecondFragment,ThirdFragment ...

July 7, 2022 · 8 min · jiezi

关于android:HMS-Core-机器学习服务打造同传翻译新声态AI让国际交流更顺畅

2022年6月,HMS Core机器学习服务面向开发者提供一项全新的凋谢能力——同声传译,通过AI语音技术缩小资源老本,增强沟通交流,旨在帮忙开发者制作丰盛多样的同声传译利用。 HMS Core同声传译涵盖了机器学习服务的[语音辨认、翻译、语音合成]()等核心技术,首先把输出的实时语音转换成文字,而后再把文字翻译成另一种语言的文字,最初把翻译后的文字转换成语音播放。同声传译能力可能帮助解决多种场景下的跨语言实时交换,反对中英文互译,提供多种音色语音播报,能够广泛应用于畛域多样、环境简单、实时性高的会议、直播等场景。 语音辨认+机器翻译,兼具品质与效率对于同声传译而言,精确的源语言输出+译文输入是其重要的衡量标准。而在面对同声传译次要的场景——大会演讲、字幕直播、会议访谈、智慧教育……往往随同长时间继续输出的音频,端侧辨认通过语音能量检测、静音检测、心跳检测等算法,实现长音频的无效断句,从而将无效语音片段送到语音辨认模块,晋升了语音辨认的效率,同时放大了同声传译时延,升高噪声对辨认成果的影响。 另一方面,在语音转成文本后,存在局部辨认谬误、口语化表白、语气词较多、局部内容反复表白等导致文本不流畅以及辨认文本并未进行粗疏断句的问题。针对这些情况,机器学习服务在文本处理模块采纳NLP语义了解、同音歧义解决、环境声音解决、口语化解决等纠错技术,来实现文本顺滑、主动断句等性能,确保返回高质量的翻译文本,从而实现语音辨认和翻译性能增强,晋升同声传译成果。 多种场景全笼罩,中英字幕双语输入同声传译既能利用在面对面跨语言交换场景,也能在近程沟通中发挥作用。无论是面对面多语种会议、近程会议、还是观看外语视频,同声传译能力能够实时生成双语字幕,升高了解老本,晋升工作与学习效率。 定制化语音播报,边听边看两不误同声传译能力通过先进的深度神经合成技术,可能实时输入音频流数据,同时提供多种中、英文男、女音色抉择,从而使发音达到更加实在天然的成果。通过实时语音播报升高提早,联合实时字幕内容,为参会者提供视听一体的沉迷式同声传译体验。 通过对语音辨认、机器翻译、语音合成三项技术的有机整合,HMS Core机器学习服务为开发者提供较低时延、较高准确率的同声传译能力,帮忙用户更顺畅地进行国际交流,打造同声传译新“声”态。欢送开发者能够登录机器学习服务主页,理解更具体的产品介绍与接入筹备。 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

July 6, 2022 · 1 min · jiezi

关于android:Android四大组件之Activity

一、Activity 是什么 1、 Activity 就是有界面的Android 程序的根底,比方只有是有界面的android 软件都是由流动在运行。没有流动的程序,你是看不到界面的,看不到的程序,也有他的用途,比方播送,服务等后盾就能够运行的 2、 一个含有Activity 的程序,必定要有一个作为主页面的 3、 流动能够互相调用,包含本身,也包含其余的程序 二、Activity 创立 一个Activity 要应用起码要有两个因素: 1、 继承自流动的源文件 //AppCompatActivity是Activity的一个子类public class MainActivity extends AppCompatActivity { @Override//此函数上面会提到 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);//要操作的函数 } }2、 在清单文件中为源文件申明Activity <span style="font-size:12px;color:#E8BF6A"><activity </span><span style="font-size:12px;color:#9876AA">android</span><span style="font-size:12px;color:#BABABA">:name</span><span style="font-size:12px;color:#6A8759">=".MainActivity"</span><span style="font-size:12px;color:#E8BF6A">> </activity></span>这仅仅是一个activity 的应用,如果想一个有界面的的程序,必定要一个主页面,这个时候就要 如下: <activity android:name=".MainActivity"> //申明属性 <intent-filter> //这两个配套应用,程序已启动就启动这个activity //如果别的activity有人应用这个,那么排在后面就是主界面 <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>3、 为Activity 设置粗劣的界面 //此句放在onCreate的super的上面//你的界面文件setContentView(R.layout.activity_main);三、Activity 启动1、 显示启动另一个流动 //A代表的是以后的activity名,B代表的是要启动的activity名Intent i=new Intent(A.this,B.class);//启动startActivity(i);2、 隐式启动( 能够启动别的软件的acitvity) Action代表的是你要启动的activity的清单属性的action Intent i=new Intent(“action”);startActivity(i);四、Activity 生存周期在任何周期里,执行了finish(); 就间接调用了onDestory() ,activity 间接被销毁了 ...

July 5, 2022 · 1 min · jiezi

关于android:无密码身份验证如何保障用户隐私安全

在互联网世界,验证用户身份是一个常见又重要的场景,利用最宽泛的形式当属帐号密码验证。随着开发者对身份验证安全性要求一直晋升,加之用户更加重视过程中的隐衷与便捷,身份验证的形式逐步多样化,有动静令牌、短信验证码、生物特色认证等形式。本文次要从安全性的角度,探讨几种常见身份验证形式存在的安全漏洞,为开发者们提供更具劣势的解决方案。 常见身份验证形式的在安全性方面的隐患如下: 既然动态和动静明码的验证形式都存在破绽,那么身份验证是否能够不依赖于明码?其实,在很早之前,就有人开始构想“无明码登录”。当然,“无明码登录”并不等于没有明码,而是用新的身份验证形式,来取代现有明码验证体系。HMS Core 线上疾速身份验证服务(HMS Core FIDO)基于这个出发点,为开发者提供了一种更具劣势的解决方案:无明码的用户身份验证,提供本地生物特色认证和线上疾速身份验证能力,可用于用户登录、购买领取等场景,同时,通过零碎完整性检测和密钥校验机制,来保障验证后果平安可信。实现流程如下。 从安全性上来说,首先,HMS Core FIDO防止了用户手动输出帐号密码,因而不用放心帐号密码泄露的危险。 其次,应用HMS Core FIDO并不需要用户随身携带额定的第二验证设施。App能够通过用户手机内置的组件验证用户身份,如指纹验证器、3D面容传感器、虹膜验证器等。如果App心愿增强验证,除了应用或插入第二设施之外,用户的手机就能够间接作为平安密钥硬件,实现身份验证。一台手机,反对多种验证场景,用户无需携带额定的设施,HMS Core FIDO不仅改善了用户体验,同时也升高了互联网服务提供商的部署老本。 最初,在验证过程中应用到的用户生物特色信息绝不会来到用户设施,仅本地解锁后才可应用,因而不用放心从服务端泄露用户数据。 除了提供平安身份验证,HMS Core FIDO也能帮忙开发者优化用户体验。HMS Core FIDO协定始终围绕爱护用户隐衷来设计,这些协定不会向在互联网平台提供可用于跟踪用户的信息,如果采纳生物特色辨认技术,用户生物特色信息绝不会来到用户设施。这一点相较于传统的生物特色认证形式,在平安隐衷爱护方面有了很大的改良,因为传统的生物特色认证会将用户数据采集到服务端,一旦服务端数据产生透露,将造成严重后果。从用户的角度来说,隐衷体验失去了极大的改善。 在身份验证过程中,用户操作简略,过程晦涩无间断,无需消耗太多工夫去期待,如承受验证码、输出明码等。 HMS Core FIDO的利用场景目前,FIDO技术曾经失去了寰球设施厂商、互联网服务提供商的宽泛认可,包含一些大型银行等金融机构、政府网络平台等等,成熟利用于波及资金变动的高安场景,如:购物网站或者App购买领取、数字货币转账、手机银行(网上银行)中的大额交易,等等。就应用流程举例来说,App在用户登录时检测设施是否反对HMS Core FIDO,如果反对,App可疏导用户开明指纹或3D面容登录,用户在下次登录时只须要验证指纹或3D面容即可。 HMS Core FIDO是基于FIDO标准面向海内外开发者提供的凋谢能力,可能帮忙互联网服务提供商的身份验证过程更平安、更简略,同时还能播种更好的用户体验。FIDO全称为Fast Identity Online标准,是由FIDO联盟推出并继续保护一套身份验证框架协定,它应用规范公钥密码学技术,提供更强有力的身份验证形式。 点击进入HMS Core FIDO官网,获取开发领导文档,体验优质的身份验证能力。 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

July 5, 2022 · 1 min · jiezi

关于android:FAQ华为帐号服务报错-907135701的常见原因总结和解决方法

很多开发者在接入华为帐号服务时,常常会呈现907135701的报错。依据官网文档阐明,错误码907135701示意: 这个错误码在安卓和鸿蒙上都会呈现,导致该报错的起因有很多,开发者能够依照上面几点进行排查。 Android工程 起因一:开发者未在开发者联盟上注册利用产品信息,并生成利用对应的APPID; 解决办法:在开发利用前,须要在AppGallery Connect中配置相干信息。 在开发利用前须要在华为开发者联盟网站上注册成为开发者并实现实名认证,具体方法请参见帐号注册认证。参见创立我的项目和创立利用,实现利用的创立。 起因二:证书指纹未配置或者配置不正确 解决办法:重点查看下AGC网页上配置的指纹和APK打包时的指纹是否统一。 证书指纹配置办法可参考开发者联盟官网文档 起因三:agconnect-services.json配置不正确或agconnect-services.json文件没有放在适合的地位。 解决办法:请确保agconnect-services.json 文件中的APPID与AGC平台上的APPID保持一致;下载的agconnect-services.json文件要拷贝到App目录下。 还须要留神的是,如果没有非凡须要,请不要关上“不蕴含密钥”的开关。 详情能够参考联盟官网文档,重新配置。 HarmonyOS(Java)工程 起因一:agc文件地位不正确, 解决办法:须要将“agconnect-services.json”文件拷贝到“entry”利用级根目录下。 起因二:证书指纹没有配置或者配置不正确。 解决办法:证书指纹配置办法能够查看配置利用签名信息。通过查看利用的签名和联盟下面配置的是否统一能够确认证书指纹是否配置正确。参考链接 起因三:config.json文件属性配置不正确 解决办法:在HarmonyOS利用“entry/src/main/config.json”的module节点减少如下属性配置。其中“name”的值不要去批改。 "metaData": { "customizeData": [ { "name": "com.huawei.hms.client.appid", // 这里须要把OAuth Client ID替换为OAuth 2.0客户端ID "value": "OAuth Client ID" // } ]}起因四:插件配置不正确 解决办法:须要增加agcp插件配置。请依据理论状况抉择。 形式一:在文件头部申明下一行增加如下配置。 apply plugin: 'com.huawei.agconnect'形式二:在在plugins中增加如下配置。 plugins { id 'com.android.application' // 增加如下配置 id 'com.huawei.agconnect'}理解更多详情>> 拜访华为帐号服务开发者联盟官网 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~ ...

July 4, 2022 · 1 min · jiezi

关于android:Android动态更换应用图标

一、背景近日,微博官网公布了一项新性能,即能够在App设置中动静更换微博的显示图标款式。依据微博官网的说法,除了最原始的图标外,微博还推出了另外10种不同的款式,既有3D微博、炫彩微博等保留了眼睛造型的新款式,也有奶酪甜馨、巧克力等以食物命名的“新口味”,还有梦幻紫、空想星空等抽象派新造型,给了微博用户多种抉择的自在。 不过须要留神的是,这一性能并不是面对所有人凋谢的,只有微博年费会员能力享受。此外,iOS 10.3及以上和Android 10及以上零碎版本反对该性能,然而iPad与一加8Pro手机无奈应用该性能。因局部手机存在零碎差别,会导致该性能不可用,微博方面后续还会对该性能进行进一步优化。 二、技术实现其实,说到底,上述性能用到的是动静更换桌面图标的技术。如果说多年以前,实现图标的切换还是一种时尚的技术,那么,咱们能够间接应用PackageManager就能够实现动静更换桌面图标。 实现的细节是,在Manifest文件中应用标签筹备多个Activity入口,没个activity都指向入口Activity,并且为每个领有标签的activity设置独自的icon和利用名,最初调用SystemService 服务kill掉launcher,并执行launcher的重启操作。 首先,咱们在AndroidManifest.xml文件中增加如下代码: <?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.xzh.demo"> <!-- 权限--> <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/> <application android:allowBackup="true" android:icon="@mipmap/wb_default_logo" android:label="@string/app_name" android:roundIcon="@mipmap/wb_default_logo" android:supportsRtl="true" android:theme="@style/Theme.AndroidDemo"> ...//省略其余代码 <!-- 默认微博--> <activity-alias android:name="com.xzh.demo.default" android:targetActivity=".MainActivity" android:label="@string/app_name" android:enabled="false" android:icon="@mipmap/wb_default_logo" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity-alias> <!-- 3D微博--> <activity-alias android:name=".threedweibo" android:targetActivity=".MainActivity" android:label="@string/wb_3d" android:enabled="false" android:icon="@mipmap/wb_3dweibo" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity-alias> ... //省略其余 </application></manifest>下面配置中波及到的属性如下: android:name:注册的组件名字,启动组件的名称。android:enabled:是否启用这个组件,也就是是否显示这个入口。android:icon:图标android:label:名称android:targetActivity:默认的activity没有这个属性,指定指标activity,与默认的activity中的name属性是一样的,须要有相应的java类文件。接着,咱们在MainActivity触发Logo图标更换逻辑,代码如下: class MainActivity : AppCompatActivity() { var list: List<LogoBean> = ArrayList() var recyclerView: RecyclerView? = null var adapter: LogoAdapter? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) initView() initData() initRecycle() } private fun initView() { recyclerView = findViewById(R.id.recycle_view) } private fun initData() { list = Arrays.asList( LogoBean(R.mipmap.wb_default_logo, "默认图标", true), LogoBean(R.mipmap.wb_3dweibo, "3D微博", false), LogoBean(R.mipmap.wb_cheese_sweetheart, "奶酪甜心", false), LogoBean(R.mipmap.wb_chocolate_sweetheart, "巧克力", false), LogoBean(R.mipmap.wb_clear_colorful, "清透七彩", false), LogoBean(R.mipmap.wb_colorful_sunset, "多彩日落", false), LogoBean(R.mipmap.wb_colorful_weibo, "炫彩微博", false), LogoBean(R.mipmap.wb_cool_pool, "清凉泳池", false), LogoBean(R.mipmap.wb_fantasy_purple, "梦幻紫", false), LogoBean(R.mipmap.wb_fantasy_starry_sky, "空想星空", false), LogoBean(R.mipmap.wb_hot_weibo, "热感微博", false), ) } private fun initRecycle() { adapter =LogoAdapter(this,list); val layoutManager = GridLayoutManager(this, 3) recyclerView?.layoutManager = layoutManager recyclerView?.adapter = adapter adapter?.setOnItemClickListener(object : OnItemClickListener { override fun onItemClick(view: View?, position: Int) { if(position==1){ changeLogo("com.xzh.demo.threedweibo") }else if (position==2){ changeLogo("com.xzh.demo.cheese") }else if (position==3){ changeLogo("com.xzh.demo.chocolate") }else { changeLogo("com.xzh.demo.default") } } }) } fun changeLogo(name: String) { val pm = packageManager pm.setComponentEnabledSetting( componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP ) pm.setComponentEnabledSetting( ComponentName(this, name), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP ) reStartApp(pm) } fun reStartApp(pm: PackageManager) { val am = getSystemService(ACTIVITY_SERVICE) as ActivityManager val intent = Intent(Intent.ACTION_MAIN) intent.addCategory(Intent.CATEGORY_HOME) intent.addCategory(Intent.CATEGORY_DEFAULT) val resolveInfos = pm.queryIntentActivities(intent, 0) for (resolveInfo in resolveInfos) { if (resolveInfo.activityInfo != null) { am.killBackgroundProcesses(resolveInfo.activityInfo.packageName) } } }}留神下面的changeLogo()办法中的字符串须要和AndroidManifest.xml文件中的<activity-alias>的name绝对应。运行下面的代码,而后点击利用中的某个图标,就能够更换利用的桌面图标,如下图所示。 ...

July 1, 2022 · 2 min · jiezi

关于android:关于MAC-M1处理器运行Android-protoc报错的解决方案

Protobuf是Google开发的一种新的结构化数据存储格局,个别用于结构化数据的串行化,即咱们常说的数据序列化。这种序列化的协定十分轻便高效,而且是跨平台的,目前已反对多种支流语言,并且比传统的XML, JSON等形式更具劣势。详情能够参考:Google protocol buffer。不过,最近在应用Protobuf时候报了如下的一个谬误。 Execution failed for task ':columbus:generateDebugProto'.> Could not resolve all files for configuration ':columbus:protobufToolsLocator_protoc'. > Could not find protoc-3.0.0-osx-aarch_64.exe (com.google.protobuf:protoc:3.0.0). Searched in the following locations: https://repo.maven.apache.org/maven2/com/google/protobuf/protoc/3.0.0/protoc-3.0.0-osx-aarch_64.exePossible solution: - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html解决的办法是更换protoc的地址,如果咱们间接关上https://repo.maven.apache.org/maven2/com/google/protobuf/protoc/3.0.0/protoc-3.0.0-osx-aarch_64.exe,会发现网页时打不开,所以我就去掉前面的版本号,关上上面的链接: https://repo.maven.apache.org/maven2/com/google/protobuf/protoc/失去protoc的版本如下:所以,咱们只须要找到上面的代码,在com.google.protobuf:protoc:3.0.0中增加osx-x86_64即可。 protoc { artifact = 'com.google.protobuf:protoc:3.0.0' } plugins { javalite { artifact = 'com.google.protobuf:protoc-gen-javalite:3.0.0' } }//变更后protoc { artifact = 'com.google.protobuf:protoc:3.0.0:osx-x86_64' } plugins { javalite { artifact = 'com.google.protobuf:protoc-gen-javalite:3.0.0:osx-x86_64' } }

July 1, 2022 · 1 min · jiezi

关于android:当你真的学会DataBinding后你会发现这玩意真香

前言DataBinding只是一种工具,用来解决View和数据之间的绑定。Data Binding,顾名思义:数据绑定,它能够将布局页面中的组件和利用中的数据进行绑定,反对单向绑定和双向绑定,单向绑定就是如果数据有变动就会驱动页面进行变动,双向绑定就是除了单向绑定之外还反对页面的变动驱动数据的变动,如果页面中有一个输入框,那么咱们就能够进行双向绑定,数据变动,它的显示内容就变了,咱们手动输出内容也能够扭转绑定它的数据。 官网文档:https://developer.android.goo... 官网Demo地址:https://github.com/googlecode... 本文代码地址 如何应用DataBinding呢?1.启用DataBinding 援用官网文档: Databinding与 Android Gradle 插件捆绑在一起。您无需申明对此库的依赖项,但必须启用它。 ☀留神:即便模块不间接应用数据绑定,也必须为依赖于应用数据绑定的库的所有模块启用数据绑定。 //在gradle的android下退出,而后点击syncandroid {   ...   //android studio 4.0以下   dataBinding{       }   //android studio4.1当前   buildFeatures {       dataBinding true   }}2.生成DataBinding布局 在咱们的布局文件中,抉择根目录的View,按下Alt+回车键,点击Convert to data binding layout,就能够转换为DataBinding布局啦。 而后咱们的布局就会变成这样: <?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools">    <data>    </data>    <androidx.constraintlayout.widget.ConstraintLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        tools:context=".MainActivity">        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="Hello World!"            app:layout_constraintBottom_toBottomOf="parent"            app:layout_constraintEnd_toEndOf="parent"            app:layout_constraintStart_toStartOf="parent"            app:layout_constraintTop_toTopOf="parent" />    </androidx.constraintlayout.widget.ConstraintLayout></layout>咱们能够发现,最里面变成了layout元素,外面有data元素。咱们将在data元素中申明这个布局中应用到的变量,以及变量的类型。 ...

July 1, 2022 · 10 min · jiezi

关于android:华为HMS-Core携手超图为三维GIS注入新动能

6月30日,在2022(第五届)GIS软件技术大会GIS根底软件新技术板块论坛上,华为联结超图推出了基于HMS Core 3D Engine开发的高保真三维GIS插件,通过3D渲染技术助力三维GIS实现更高清、更具真实感的数字世界场景。 本次大会以“天文智慧 多维筑基”为主题,旨在分享GIS软件的最新进展、交换GIS利用最佳实际。针对新一代三维GIS技术,超图研究院冯振华副院长在会上进行了专题分享,围绕三维数据模型体系、GIS与3D引擎的跨界交融、三维特效与仿真等层面的技术新进展深刻解读。 3D引擎在三维GIS中的要害利用三维GIS作为GIS技术的标志性内容之一,实现了GIS技术从立体世界向平面世界的逾越,广泛应用于疆土空间规划、智慧城市、智慧园区等泛滥畛域。然而在理论利用中,三维GIS仍存在不少须要超越的阻碍,例如在场景渲染方面尚有很大的优化空间。可视化是GIS区别于个别信息系统的外围性能,渲染能力则在可视化的成果实现中扮演着重要角色。 在大会的GIS根底软件新技术板块论坛上,超图研究院冯振华副院长介绍了新一代三维GIS的技术演进,以及基于HMS Core 3D Engine能力开发的大规模天文场景高保真渲染解决方案——超图高保真三维GIS插件。该插件可能将一般的GIS数据转化为更丰盛的三维视觉 ,呈现出更高清、更具真实感的场景和成果。 来自华为HMS Core的高级产品经理则在冯振华副院长介绍的根底上进一步展现了3D Engine在GIS畛域的技术能力与利用成果。集成了3D Engine的GIS平台,基于3D Engine丰盛牢靠的能力,可能在三维GIS上实现更多的3D渲染特效,实现高清真实感的三维数字世界场景。3D Engine还具备寰球级别数据影像加载能力,可能将城市修建以及街景数据动静加载出现,呈现出具备真实感的成果和体验。 除了渲染之外,作为以后3D引擎畛域重要能力之一,3D Engine的大世界坐标组件(Large World Partition)提供了对原生双精度的反对,能够提供更大的坐标范畴和更高的精度,并且还反对世界原点变更、渲染坐标偏移、ReversedZ等个性,为像GIS这样的高精度利用提供了短缺的技术支持。 HMS Core 构建三维数字世界底座3D Engine是HMS Core最新推出的面向行业搭档的重要图形能力,不仅提供高性能、高画质、高扩展性的实时3D引擎,还提供可视化开发工具,可能帮忙开发者更轻松便捷地制作高品质的3D利用。 HMS Core 3D Engine可能广泛应用于数字孪生以及虚构数字人等畛域,例如: 1.电力行业:发电厂、变电站等场合三维场景渲染,反对设施立体化展现,不便告警显示故障定位 2.交通行业:公交站、高铁站等场合三维场景渲染,配合车流人流治理,反对公共交通零碎数字化转型 3.社交行业:社交虚构形象三维展现,反对人物扭脸、换装、互动等趣味内容,助力社交利用迈进元宇宙 4.教育行业:虚构老师线上互动,无需真人出镜,升高课程制作老本,面向少儿教育,减少课程趣味性 5.公益事业:手语数字人,精细化出现手语动作,配合人物表情,帮忙听障人士更好融入日常生活 3D Engine以及超图高保真三维GIS插件目前已面向行业搭档凋谢预览版体验,通过HMS Core官网即可申请试用。HMS Core将进一步继续优化打磨产品性能与体验。 值得一提的是,除了3D Engine之外,HMS Core在图形畛域还提供3D建模服务、AR Engine等其余能力,并将图形渲染相干技术全面凋谢给开发者。 HMS Core提供端、云凋谢能力,目前曾经打造了七大畛域的服务,将华为积淀多年的、具备外围劣势的能力及服务凋谢给开发者,帮忙开发者实现利用高效开发、快速增长、商业胜利,使能开发者翻新,为寰球用户提供精品内容、服务及体验。 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

July 1, 2022 · 1 min · jiezi

关于android:HMS-Core音频编辑服务3D音频技术助力打造沉浸式听觉盛宴

2022年6月28日,HDD·HMS Core.Sparkle影音娱乐沙龙在线上与开发者们见面。HMS Core音频编辑服务(Audio Editor Kit)专家为大家具体分享了基于拆散的3D音乐创作技术,引起了行业及音乐爱好者的关注。 音频3D化是音频倒退的重要方向,但以后从源头制作3D音频老本高,工夫长,具备较高门槛。而基于HMS Core音频编辑服务提供的音源拆散和空间音频渲染能力可疾速制作3D音乐,助力宽广开发者疾速进入3D音频的新时代。 实时拆散人声、伴奏和乐器声目前,音频编辑服务提供的音源拆散性能曾经凋谢了人声与伴奏、乐器等多种拆散形式,能够实时解析乐曲中的人声、伴奏和鼓、小提琴、钢琴、吉他、贝司、管弦乐等近十种乐器元素,并将其提取到独立的音轨上,满足创作者对伴奏制作、扒带、音乐创作等多种场景的利用需要。并且无需业余的音频处理软件,只有集成该服务,就能在挪动端轻松实现音频剪辑,使创作者更加便捷的实现对声音的革新。 乐曲中的人声、伴奏和乐器元素可精准拆散 音频2D转3D音频编辑服务提供空间音频渲染服务,帮忙开发者在利用中构建3D音效。用户能够在音频中增加空间渲染的成果,将不同组成的音频渲染到指定的三维空间方位,从而达到环绕声成果。 音频编辑服务提供的空间渲染,不仅反对固定摆位的动态渲染,还能够提供通过扩大和挪动带来的动静渲染成果。此性能反对界面和文件接口解决,满足音乐创作、环绕声编辑、游戏影视配乐等多种应用场景。 不同音频可渲染到指定空间方位 两种集成形式,灵便抉择、轻松构建音频编辑服务提供UI SDK和原子能力SDK两种集成形式,开发者可自由选择集成。 1) UI SDK提供固定的UI界面,省时省力。 2) 原子能力SDK提供多种能力接口,可自定义UI界面,适配利用格调。 HMS Core音频编辑服务是华为为开发者凋谢的各类场景音频解决能力的汇合,整合了华为在音乐、语音等相干音频畛域的技术积攒。除了以上能力,还提供音频根底编辑、AI配音、变声降噪、歌声合成等丰盛的音频解决能力。将来,HMS Core音频编辑服务还将凋谢更多个性,满足音视频开发者的需要,打造易用且安全可靠的音频编辑工具。 具体请参考华为开发者联盟音频编辑服务官网 获取开发音频编辑服务领导文档 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

June 30, 2022 · 1 min · jiezi

关于android:华为帐号多端协同打造美好互联生活

华为帐号是关上华为生态服务的一把钥匙,只需一个华为帐号,即可在华为全场景设施上应用华为利用市场、华为音乐、华为云空间、华为钱包等泛滥优质的华为应用服务。同时,华为帐号绑定的所有会员权利、购买记录、珍藏/喜爱等数据,也会在不同设施间一键同步,轻松实现自在切换。 登录华为帐号后,您能够在多台设施上,快捷同步集体数据如您想让本人的图库、联系人、备忘录等信息,在本人的多台华为设施上实时同步更新,能够开启华为云空间同步性能。开启后,您在任意一台设施上,新增/删除/批改本人的图库、联系人、备忘录等信息,其它设施上的对应信息都会实时同步更新。 登录华为帐号后,您在华为应用服务里的应用记录,也将同步更新在您的所有设施上如您在笔记本电脑上登录了华为帐号,通过电脑管家将手机与电脑连贯,即可在电脑端查看手机近期拜访过的文档内容。此外,反对在电脑和手机间相互拖拽文件应用、编辑或共享剪贴板,无缝跨设施复制粘贴,让办公、学习更高效。 如您在智慧屏上登录了华为帐号,在手机/平板端的看剧、听歌及珍藏记录等信息都会一键同步到智慧屏中,可间接在智慧屏上持续享受服务,也能够通过手机/平板管制智慧屏的播放、快进、暂停等。此外,您还能够在智慧屏、手机、平板上进行多窗口随心切换,比方将手机/平板上的影片一键切换到智慧屏上,畅想大屏观感。 如您在智能穿戴设施上登录了华为帐号,通过与手机装置的静止衰弱App联动,即可轻松治理各项静止数据与设施,您的各项身材指标和静止记录也都能够在手机上高深莫测。 如您在车机上登录了华为帐号,进入车机后,可持续播放手机上正在听的歌曲,做到无缝连接。同时,您还能够通过畅联App,将手机里的视频通话转移至车辆中控屏,解放双手,轻松享受与家人高清视频通话的体验,通话更畅快。如果想跟孩子进行通话,只须要在车机上登录孩子儿童手表的管理员帐号,在畅联App的拨号页面输出儿童手表电话号码,即可实现。(舒适揭示:为保障行车平安,驾驶员请勿在驾驶过程中应用视频通话性能,如需应用请驻车并确保环境平安。) 华为帐号体系下的数据同步全场景体验给咱们的生存带来了很多便当,只须要在帐号核心登录您的华为帐号,即可实现智能设施之间的云同步配对,在多设施间一键切换,多端同步。当然,华为帐号的多端同步体验远不止于此,将来咱们还将持续摸索,打造更加智慧互联的美好生活。 舒适提醒: 帐号存储着个人信息和财产,因而保障帐号的平安尤为重要。 华为帐号呐喊大家不要共享帐号应用,倡议每人都应用本人的专属独立帐号,爱护集体信息安全。您能够通过“登录设施治理”,对已经登录过以后华为帐号的所有设施(包含手机、PC、平板、其余智能设施等)进行治理。 【设置门路】:手机设置页面-帐号核心-帐号平安-登录设施治理 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

June 30, 2022 · 1 min · jiezi

关于android:Android中View的工作流程之layout过程

PS:本文系转载文章,浏览原文可读性会更好,文章开端有原文链接 ps:文章是基于 Android Api 31来剖析源码的。 目录 1、View 的 layout 过程 1、1 View(它不是ViewGroup) 的 layout 过程 1、1、1 原始 View 的 layout 过程 1、1、2 具体 View 的 layout 过程 1、2 ViewGroup 的 layout 过程1、View 的 layout 过程 layout 的过程是 ViewGroup 用来确定子元素的地位,当 ViewGroup 的地位被确定后,如果这个 View 是 ViewGroup 并且有子元素的话,它在onLayout中 会遍历所有的子元素并调用其 layout 办法,在 layout 办法中onLayout办法又会被调用;上面咱们先说一下非 ViewGroup 的 layout 过程。 1、1 View(它不是ViewGroup)的 layout 过程 1、1、2 原始 View 的 layout 过程 咱们先看一下 View 的 layout 办法; ...

June 29, 2022 · 3 min · jiezi

关于android:HMS-Core打造影音娱乐行业解决方案助推视听新浪潮

6月28日,HDD·HMS Core. Sparkle影音娱乐线上沙龙在各大直播平台与开发者们见面。本次线上沙龙围绕影音娱乐行业现状察看和趋势、用户数据洞察剖析以及HMS Core影音娱乐行业解决方案等多个话题开展,与开发者独特探讨如何打造丰盛乏味的影音娱乐体验。 音视频逐步成为大众化的表白语言,与此同时,音视频市场也进入倒退成熟期,无论对于音视频创作者还是内容平台,优化生产能力与生产效率,都是决定他们日后继续倒退与增长的一个外围根底与长期驱动。那么,作为影音娱乐利用的开发者,该如何在泛滥的同类产品中怀才不遇造成差异化劣势,做用户真正须要的产品? 为此,HMS Core整合华为各畛域劣势凋谢能力,为开发者提供了影音娱乐行业解决方案。该解决方案旨在助力开发者进行影音娱乐利用技术创新,以实现用户增长,晋升用户粘性。 视频剪辑智能化,让用户秒变创作达人随着自媒体的疾速倒退,低门槛易上手且轻量化的视频剪辑利用成为创作辅助工具的演变趋势。HMS Core视频编辑服务提供视频导入、编辑解决、特效渲染、视频导出、媒体资源管理等视频解决能力,可助力疾速实现App视频编辑能力;还提供丰盛的智能化编辑性能,如精彩片段、指标宰割、一键动效、AI着色等,让视频剪辑更简略高级,使普通用户也能秒变创作达人。 视频编辑服务在不断丰富各种AI剪辑能力外,还上线了全新模板能力。用户只需上传模板对应数量的图片或者视频素材,即可生成同款精彩视频,让素材即刻领有大片质感,满足亲子、旅行等不同场景视频制作需要。 3D音频技术,助力打造沉迷式听觉盛宴音频3D化是音频倒退的重要方向,越来越多音乐流媒体平台和用户开始接触空间化的音乐音频。HMS Core音频编辑服务通过提供音源拆散和音频3D化能力,可将人声、伴奏及乐器等音频元素拆散到独立的音轨上,并且通过大量数据的训练和基于AI的迭代训练优化,可将不同音频渲染到指定的三维空间方位,轻松实现音频2D转3D。目前,HMS Core音频编辑服务提供反对动态和动静渲染两种模式,可让开发者低成本且疾速制作3D音频。 除此之外,HMS Core音频编辑服务还提供根底编辑、AI配音、变声降噪等丰盛的音频解决能力,全方位满足音频利用开发者的需要。 端到端网络优化与加强能力,让视听体验更顺畅影音娱乐类利用对网络要求较高,卡顿、时延、下载速度过慢,都会让用户难以承受。为此,HMS Core提供了端到端的网络优化与加强能力,开发者通过简略的接入即可大幅晋升利用的网络体验。 比方Network Kit凋谢的全链路网络减速技术,能够依据用户的网络情况,主动提供差异化的参数调优,缩小应用过程中的有效期待,晋升页面加载和下载速度20%以上。无线传输服务(Wireless Kit),通过双向的网络品质感知性能让用户能够取得更佳的观影体验;通过固定路线网络品质预测,利用可用提前进行缓存,保障连续性网络体验;还有其提供的双WiFI能力可让利用调用双WiFi减速,让观影体验更高清、晦涩。 一键晋升视频分辨率,开启超清视界在公共场合、地铁站等弱网环境中,有什么方法在不扭转网络带宽的状况下,既保证在线视频的晦涩播放也能晋升视频分辨率呢? 或者你可试试接入HMS Core的多媒体管线服务,其提供的视频超分能力反对270P-720P等多种分辨率,最高可实现3倍超分。采纳GPU超分形式,270P及以下的视频,能够实现最高2倍超分,而采纳NPU超分形式,则能够提供3倍的超分能力。而且通过HUAWEI HiAI Foundation端侧AI计算调优技术,开发者仅需以很低的功耗即可实现视频超分降级体验。 目前,HMS Core已胜利助力华为视频、爱奇艺、优酷等多个视频平台在端侧部署视频超分技术,不仅晋升了用户观影的晦涩度,同时晋升了画面质量。 除了以上提到的创新能力外,HMS Core影音娱乐行业解决方案还推出了手语数字人技术,开发者们可通过调用HMS Core手语服务接口,疾速实现手语实时翻译,为听障人士提供更加多样化的服务;同时依靠机器学习服务和AR技术提供主动翻译、音频主动生成字幕、视频背景切换、人体跟踪、静止跟踪、人脸贴纸、虚构道具等丰盛乏味的影音娱乐交互体验。 HMS Core影音娱乐解决方案的推出,将为影视音乐流媒体平台的利用翻新提供更大的设想空间。更多对于HMS Core. Sparkle系列沙龙以及HMS Core行业解决方案详情,欢送到华为开发者联盟官网查看。 流动有奖调研问卷 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

June 29, 2022 · 1 min · jiezi

关于android:Android-Target-31-升级全攻略-记阿里首个超级-App-的坎坷升级之路

作者:杨夕凯、张炅轩 简述Android Target 版本作为利用和零碎版本间的“协定”与“桥梁”,在厂商预装单干、利用商店曝光、凋谢能力方面都是一个重要衡量标准,近年来谷歌和手机厂商对于 Target 降级的推动速度和力度显著加大。Target 版本越高,对系统和用户的安全性相应越好,但其对利用的改变、束缚和不明确的坑也随之增多,尤其是对应用零碎API范围广、业务简单、稳定性要求高的超级利用挑战很大。 高德地图此次一鼓作气从 Target 28 降级到 最新的 Target31,成为业界首个降级到最新版本的头部利用,满足了利用市场、厂商预装合规的要求,为后续市场先发、预装单干等博得了工夫窗口。第一个“吃螃蟹”,踩了不少坑,因而咱们总结了降级过程中遇到的问题、原理、解决方案及操作形式,心愿能帮大家在降级 Target 中事倍功半。 1.1 释义:何为 Target 版本Target 版本,用文言意思是「告知零碎我已满足指定零碎版本的合规要求,并违心受约束」。具体指: 从束缚上,和个别的强制束缚(例如用户降级到 Android 12 就必须满足某个条件)不同,Target 版本为咱们提供了一种“柔和、缓冲适配”的路径,容许用户在降级 Android 12 时,先长期不受新零碎束缚(Target 为老版本),而是等本人“准备就绪后”在降级 Target 版本以满足束缚,更具灵活性;从强度上,Target 版本越高,受到的束缚越多,且约束力越强,这里的版本为“零碎 API 版本号”,和 Android 版本一一对应,如 28 对应的是 Android 9,29 为 Android 10,以此类推。1.2 挑战:变动快、老本高的起因为什么近期 Target 降级推动快、老本高呢?从行业倒退和技术的角度来看: 从行业倒退看趋势: 厂商跟进快: 近年来对于 Target 降级的要求体现了“趋紧”和“趋严”,通过此伎俩,可从零碎层面束缚各 App 满足隐衷合规、对立用户体验等要求;其中:a、针对预装利用,作为 CTS(Compatibility Test Suite,谷歌的兼容性测试套件)集成的必要一环,若不能及时响应 Target 降级诉求,则很有可能导致预装下架,进而对厂商单干、利用带量等造成重大影响; b、针对市场利用,通过TAF 《挪动应用软件高API等级预置与散发自律公约》等公约,从教训看会在 1-2年内将条件扩大到利用商店,即使不波及预装利用,则仍要防患未然 隐衷力度强:无论政府监管部门,还是厂商、Google,其满足“隐衷合规”的要求越加频繁,已经“粗放”的App 权限已成过来,从长远看,此种限度对用户是有显著收益的,但对于利用开发者而言,须要及时响应、明确趋势,充沛了解和执行;碎片设施多:谷歌和各厂商/ROM 对于隐衷、API 调整等的了解不同,其不同版本、不同设施的施行成果有较大差别,且“碎片化”愈演愈烈。如“大抵地位”、“启动图”等,各厂商会依据本人的需要来做二次开发,导致在谷歌原生的适配办法,到其它 ROM 中则存在问题从技术看问题: ...

June 28, 2022 · 3 min · jiezi

关于android:Android-Kotlin语言学习第二课权限申请和ContentProvider简单使用

一:增加一个展现数据的布局 <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/contactsView" android:layout_width="match_parent" android:layout_height="match_parent"/></LinearLayout>二:增加BaseActivity abstract class BaseActivity : AppCompatActivity() { /** * kotlin 容许一个类继承另一个类 * kotlin 所有的类都继承自Any类(Any 不是 java.lang.Object) * Any类是所有类的超类,对于没有超类型申明的类是默认超类 * Kotlin规定一个类能够给继承,必须应用open关键字润饰 * */ /** * 抽象类:关键字为abstract *形象函数: abstract fun initView() *形象属性:abstract var name:String */ /** *变量能够定义为可变(var)和不可变(val) * 常量定义:val相当于被final 润饰 var相当于可变非final润饰 *等价于Java:public static final String TAG=BaseActivity.class.getSimpleName()*/ //定义标记 open val TAG: String = this.javaClass.simpleName //初始化布局View abstract fun initView() //初始化数据 abstract fun initData() //初始化获取布局id,带返回值的形象办法 abstract fun getLayoutId(): Int /** * 语法定义 * fun 办法名 (参数名 :参数类型):返回值类型{ * * return 返回值 * * } * * 无返回值能够应用Unit 代替返回值类型 ?代表可空 * Kotlin 是null平安的语言 Byte ,Short,Int ,Long型的变量都是不能承受null值,如果要存储null值须要应用Byte?,Short?,Int?,Long? * * override fun onCreate(savedInstanceState: Bundle?) :Unit{ * * } **/ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(getLayoutId()) initView() initData() } override fun onDestroy() { super.onDestroy() }}三:定义FourActivity,实现权限受权和联系人数据ContentResolver解析过程间通信 ...

June 28, 2022 · 2 min · jiezi

关于android:运动App如何实现端侧后台保活让运动记录更完整

你在锤炼健身时,有没有遇到这样的状况?辛辛苦苦锤炼了几小时,却发现App进行了运行,本次静止并没有被记录到App上,从而失去了一个查看残缺静止数据的机会? 静止类App是通过手机或者穿戴设施的传感器,来辨认静止状态并反馈给用户的,App是否在手机后盾时刻放弃运行是影响静止数据完整性的关键因素。为了满足用户查看残缺静止数据的需要,静止类App都心愿在设施后盾保活,并通过传感器实时记录用户的静止数据。但大部分手机厂商为了节俭电量,一旦利用处于后盾就会被零碎限度甚至强制敞开,导致最终出现给用户的静止记录不残缺。 静止类App要想实现端侧后盾保活,目前通常有两种解决办法: 疏导用户在手机上手动设置保活,如敞开电池优化,容许App后盾运行。这种办法毛病在于操作步骤较简单,用户学习老本较高。能够通过集成华为静止衰弱服务来解决此问题,静止衰弱服务提供反对后盾保活的静止记录API,集成该能力后利用可能在用户的锤炼过程中在华为手机后盾放弃运行,从而实现用户锤炼过程中的静止记录不间断。那如何实现后盾保活性能呢?以下是具体的集成步骤。 集成步骤 请参考开发筹备实现申请Health Kit服务,勾选产品必须申请的数据权限并集成SDK。调用后盾保活性能需申请静止记录读取权限,再获取用户受权实现权限申请。为保障您的利用不被零碎解冻,须要开启一个前台服务Foreground services,在前台服务中调用ActivityRecordsController办法创立容许后盾运行的静止记录;调用ActivityRecordsController的beginActivityRecord接口开始容许后盾运行的静止记录,默认会申请容许利用后盾运行时长10分钟;// 请留神此处的this为Activity对象ActivityRecordsController activityRecordsController = HuaweiHiHealth.getActivityRecordsController(this); // 1.结构新静止记录开始工夫long startTime = Calendar.getInstance().getTimeInMillis(); // 2.结构ActivityRecord对象,设置静止记录开始工夫 ActivityRecord activityRecord = new ActivityRecord.Builder() .setId("MyBeginActivityRecordId") .setName("BeginActivityRecord") .setDesc("This is ActivityRecord begin test!") .setActivityTypeId(HiHealthActivities.RUNNING) .setStartTime(startTime, TimeUnit.MILLISECONDS) .build(); // 3.构建利用静止记录运行中展现的页面, MyActivity需替换成本身的Activity类ComponentName componentName = new ComponentName(this, MyActivity.class);// 4.构建静止记录后盾运行状态变动监听器OnActivityRecordListener activityRecordListener = new OnActivityRecordListener() { @Override public void onStatusChange(int statusCode) { Log.i("ActivityRecords", "onStatusChange statusCode:" + statusCode); }};// 5.调用启动新静止记录API接口beginActivityRecordTask<Void> task1 = activityRecordsController.beginActivityRecord(activityRecord, componentName, activityRecordListener); // 6.增加启动ActivityRecord胜利 task1.addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { Log.i("ActivityRecords", "MyActivityRecord begin success"); } // 7.增加启动ActivityRecord失败}).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { String errorCode = e.getMessage(); String errorMsg = HiHealthStatusCodes.getStatusCodeMessage(Integer.parseInt(errorCode)); Log.i("ActivityRecords", errorCode + ": " + errorMsg); } });若用户静止工夫较长,每邻近10分钟(小于10分钟)需调用ActivityRecordsController的continueActivityRecord接口续申请后盾保活10分钟;// 请留神此处的this为Activity对象ActivityRecordsController activityRecordsController = HuaweiHiHealth.getActivityRecordsController(this); // 调用continueActivityRecord办法为指定静止记录续申请容许后盾运行,入参为ActivityRecord的ID字符串 Task<Void> endTask = activityRecordsController.continueActivityRecord("MyBeginActivityRecordId");endTask.addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { Log.i("ActivityRecords", "continue backgroundActivityRecord was successful!"); }}).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { Log.i("ActivityRecords", "continue backgroundActivityRecord error"); }});当用户静止完结时,调用ActivityRecordsController的endActivityRecord接口进行该静止记录,同时勾销利用后盾保活;// 请留神此处的this为Activity对象final ActivityRecordsController activityRecordsController = HuaweiHiHealth.getActivityRecordsController(this);// 调用endActivityRecord接口进行静止记录,入参为ActivityRecord的ID字符串或者null// 入参为ID字符串时,进行以后利用指定ID的静止记录// 入参为null时,进行该利用以后所有的未进行静止记录Task<List<ActivityRecord>> endTask = activityRecordsController.endActivityRecord("MyBeginActivityRecordId");endTask.addOnSuccessListener(new OnSuccessListener<List<ActivityRecord>>() { @Override public void onSuccess(List<ActivityRecord> activityRecords) { Log.i("ActivityRecords","MyActivityRecord End success"); // 返回进行胜利的静止记录列表 if (activityRecords.size() > 0) { for (ActivityRecord activityRecord : activityRecords) { DateFormat dateFormat = DateFormat.getDateInstance(); DateFormat timeFormat = DateFormat.getTimeInstance(); Log.i("ActivityRecords", "Returned for ActivityRecord: " + activityRecord.getName() + "\n\tActivityRecord Identifier is " + activityRecord.getId() + "\n\tActivityRecord created by app is " + activityRecord.getPackageName() + "\n\tDescription: " + activityRecord.getDesc() + "\n\tStart: " + dateFormat.format(activityRecord.getStartTime(TimeUnit.MILLISECONDS)) + " " + timeFormat.format(activityRecord.getStartTime(TimeUnit.MILLISECONDS)) + "\n\tEnd: " + dateFormat.format(activityRecord.getEndTime(TimeUnit.MILLISECONDS)) + " " + timeFormat.format(activityRecord.getEndTime(TimeUnit.MILLISECONDS)) + "\n\tActivity:" + activityRecord.getActivityType()); } } else { // 没有进行胜利返回null Log.i("ActivityRecords","MyActivityRecord End response is null"); } }}).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { String errorCode = e.getMessage(); String errorMsg = HiHealthStatusCodes.getStatusCodeMessage(Integer.parseInt(errorCode)); Log.i("ActivityRecords",errorCode + ": " + errorMsg); }});须要留神的是,因为端侧后盾保活API属于敏感权限,静止类利用接入时需进行人工审核,确保数据安全、流程合规能力上架。 ...

June 28, 2022 · 2 min · jiezi

关于android:品质影音体验畅享娱乐生活丨HMS-CoreSparkle影音娱乐创新线上沙龙报名启动

从全民娱乐到全民创作,音视频、直播已成为娱乐市场中最为沉闷的内容状态,用户在享受视听娱乐的同时,也更期待通过这些平台来表白本人。 面对用户个性化需要的减少,影音娱乐利用开发者和内容平台,该如何通过技术手段翻新产品性能,晋升用户体验,让利用抢占用户趣味“洼地”? 6月28日,HDD-HMS Core.Sparkle影音娱乐翻新线上沙龙,将在各大直播平台与开发者们见面,诚邀您的参加。 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

June 27, 2022 · 1 min · jiezi

关于android:Android中View的工作流程之measure过程

PS:本文系转载文章,浏览原文可读性会更好,文章开端有原文链接 ps:文章是基于 Android Api 31来剖析源码的。 目录 1、View 的 measure 过程 1、1 View(它不是ViewGroup) 的 measure 过程 1、1 、1 原始 View 的 measure 过程 1、1、2 具体 View 的 measure 过程 1、2 ViewGroup 的 measure 过程1、View 的 measure 过程 这里 View 的 measure 的过程就是 View 的测量过程嘛,也就是去测量 View 的宽高,它分两种状况去思考,一种是具体的 View(比如说TextView) 或者说是原始的 View ,一种是 ViewGroup。 1、1 View(它不是ViewGroup) 的 measure 过程 这里没有子元素 View 的 measure 过程就分为两种状况了,一种是它是 ViewGroup 的 View,一种是她不是 ViewGroup 的 View(比如说 TextView);好,咱们先剖析它不是 ViewGroup 的 measure 过程。 ...

June 25, 2022 · 2 min · jiezi

关于android:HMS-Core机器学习服务实现同声传译支持中英文互译和多种音色语音播报

当用户有跨语种交换或音频内容翻译的需要时,利用须要能自动检测语音内容再输入为用户须要的语言文字。 HMS Core机器学习服务提供同声传译能力,同声传译实现将实时输出的长语音实时翻译为不同语种的文本以及语音,并实时输入原语音文本、翻译后的文本以及翻译文本的语音播报。 在直播类,会议类的利用中,同声传译显得尤为重要。比方,在会议类利用中,能够将正在进行的会议发言人的发言内容实时输入为指标语言文字,便于不同语言的人实时了解会议内容,进步会议效率。在直播类利用中,能够将主播的谈话内容实时输入为用户须要的语言文字,再进行实时播报,进步了用户的观看体验。 HMS Core机器学习服务同声传译能力不仅反对间断5小时的实时长语音输入转换为文本,还反对中英文互译和多种音色语音播报,满足不同类型利用中不同场景的须要。 DEMO示例 开发步骤 在进行开发之前,您须要实现必要的开发筹备工作,同时请确保您的工程中曾经配置HMS Core SDK的Maven仓地址,并且实现了本服务的SDK集成。 SDK示例代码如下: dependencies{ // 引入同声传译服务SDKimplementation 'com.huawei.hms:ml-computer-si-sdk:3.5.0.312'}请参见云端鉴权信息应用须知,设置您利用的鉴权信息。创立同传识别器,并设置配置。MLSimultaneousInterpretationConfig config = new MLSimultaneousInterpretationConfig.Factory() // 设置源语种,目前反对中文和英文.setSourceLanguage(MLSimultaneousInterpretationConstants.LAN_ZH_CN) // 设置指标语种,目前反对中文和英文 .setTargetLanguage(MLSimultaneousInterpretationConstants.LAN_EN_US) // 设置辨认类型。反对原始文本+翻译文本+翻译语音 .setResultType(MLSimultaneousInterpretationConstants.RESULT_TYPE_TEXT_TRANSLATED_VOICE) // 设置发音人,反对中、英男声和女声 .setPerson(MLSimultaneousInterpretationConstants.EN_FEMALE_VOICE) .create(); MLSimultaneousInterpretationRecognizer = MLSimultaneousInterpretationRecognizer.getInstance();创立语音辨认后果监听器回调。// 回调实现MLSimultaneousInterpretationListener,实现接口中的办法。 protected class SIRecognitionListener implements MLSimultaneousInterpretationListener { @Override public void onStartListening() { // 录音器开始接管声音。 } @Override public void onVoiceDataReceived(byte[] data) { // 返回给用户原始的PCM音频流和音频能量,该接口并非运行在主线程中,返回后果须要在子线程中解决。 } @Override public void onRecognizingResults(Bundle partialResults) { // 从SIRecognitionListener接管到继续语音辨认的文本。 // RESULTS_RECOGNIZING:原始文本;RESULTS_TRANS_RECOGNIZING:tts文本;RESULTS_SN:原始序列号;RESULTS_TRANS_SN:tts序列号 } @Override public void onResults(Bundle results) { // 从SIRecognitionListener接管到残缺的句子 // RESULTS_RECOGNIZED:原始后果;RESULTS_TRANS_RECOGNIZED:tts后果 } @Override public void onError(int error, String errorMessage) { // 辨认产生谬误后调用该接口。 } @Override public void onState(int state, Bundle params) { // 告诉利用状态产生扭转。 } }绑定同传识别器。mlSimultaneousInterpretationRecognizer.setMLSimultaneousInterpretationListener(new SIRecognitionListener());调用startRecognizing启动语音辨认。// 开始辨认。 mlSimultaneousInterpretationRecognizer.startRecognizing(config);辨认实现后,完结辨认并开释资源。if (mlSimultaneousInterpretationRecognizer!= null) { mlSimultaneousInterpretationRecognizer.destroy(); }理解更多详情>> ...

June 25, 2022 · 1 min · jiezi

关于android:华为机器学习服务语音识别功能让应用绘声绘色

随着人们对生存的典礼感的谋求,挪动设施、可穿戴设施、智能家居设施、车载信息娱乐零碎也变得越来越风行。在这些利用上,鼠标、键盘这样的交互方式不再便捷,而语音作为人类之间最天然的交换形式,语音辨认技术俨然已成为各大利用的“标配”。语音辨认场景利用非常宽泛,如语音输入法、语音搜寻、实时字幕、游戏娱乐、社交聊天、人机交互、驾驶模式等。因而,App里集成语音辨认性能不仅能解放双手,也能失去很好的人机交互体验。 1. 业务简介HMS Core机器学习服务实时语音辨认服务反对将实时输出的短语音(时长不超过60秒)转换为文本,可实时辨认60秒内的语音。该服务应用行业当先的深度学习技术,随着算法和数据的一直迭代,目前在通用现实环境下的辨认准确率可达95%以上。目前反对中文普通话(包含中英文混说)、英语、法语、德语、西班牙语、意大利语、阿拉伯语、俄语、泰语、马来语、菲律宾语的辨认。 DEMO演示 2 . 场景介绍HMS Core机器学习服务实时语音辨认服务笼罩日常生活及工作中的泛滥畛域,并且深度优化了购物搜寻、影视搜寻、音乐搜寻以及导航等场景中的辨认能力,进一步提高这几类场景的辨认准确率。在应用购物类App搜寻商品时,能够将语音形容的商品名称或特色辨认为文字从而搜寻到指标商品。同样,在应用音乐类App时,能够将语音输入的歌名或歌手辨认为文字进而搜寻歌曲。另外,司机在驾驶过程中不不便输出文字时,能够将输出的语音转换为文字继而搜寻目的地,让行车更加平安。 3 . 性能特点• 反对实时出字 • 提供拾音界面、无拾音界面两种形式 • 反对端点检测,可精确定位开始和完结点 • 反对静音检测,语音中未谈话局部不发送语音包 • 反对数字格局的智能转换,例如语音输入“二零二零年”时,可能智能辨认为“2020年”。 如何接入华为机器学习服务? 华为机器学习服务官网为您提供具体的文档领导。 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

June 24, 2022 · 1 min · jiezi

关于android:APICloud携手三六零天御助力企业守好App安全第一关

近期,用友YonBuilder挪动低代码开发平台(APICloud)与360团体挪动利用平安品牌三六零天御达成单干。三六零天御行为式验证码模块正式在APICloud平台上线,为企业提供新的挪动利用用户验证形式,帮忙企业守好app注册登录平安“第一关”。 三六零天御作为360面向挪动利用打造的平安品牌,领有涵盖挪动利用全生命周期的平安防护SaaS及本地化部署服务。在利用开发测试、公布上架及经营阶段,提供全面的加固、检测服务和丰盛的app平安组件,同时反对收费的环境剖析、用户经营剖析、解体日志剖析等增值服务,为疾速无效地搭建起功能丰富、操作便捷的体系化挪动平安解决方案提供了便当。此次在APICloud平台新上线的三六零天御行为式验证码模块可对登录注册场景用户真实性行为进行把控,无效把控登录注册环节危险,为业务危险提供强有力进攻。基于“360平安大脑”国家级平安数据情报库的撑持,把握90%的黑灰产情报如黑产手机号、黑产ip等,联合异样环境监测、设施指纹、拜访频率等多项技术,通过验证后盾对海量数据的建模剖析,精确断定人机后果,无效拦挡歹意登录、批量注册等黑灰产攻打。APICloud致力于解放开发者,缩减开发过程中繁冗、重复性的工作,让企业以全新的形式,疾速构建企业级挪动利用:可视化开发可能主动生成专业级源码,一套代码即可适配Android、iOS、小程序、HTML5多端利用,并且提供极致的性能体验。同时,APICloud还反对以低代码的形式,一站式实现利用开发、利用经营、可视化云开发、利用调试、利用公布全生命周期治理;以API连贯的形式,撑持企业全场景利用落地。 三六零天御行为式验证码模块上线用友APICloud平台,以app注册登录的“第一关”平安防护,拉开了本次APICloud与三六零天御单干的尾声。将来,APICloud还将与三六零天御独特携手,为企业挪动开发提供更丰盛的平安产品,为企业一站式建设挪动利用平安防护经营体系提供便当,进一步减速企业挪动策略落地,疾速赋能企业挪动数字化。

June 24, 2022 · 1 min · jiezi

关于android:影音娱乐应用开发这些关键词请查收

影音娱乐利用开发将迎来哪些新技术?请锁定6月28日HDD:HMS Core. Sparkle影音娱乐翻新线上沙龙直播间。参加直播间互动,还有机会取得HUAWEI nova 8 SE手机和HUAWEI FreeBuds Lipstick口红耳机哦。

June 24, 2022 · 1 min · jiezi

关于android:RecyclerView用ItemDecoration实现StickyHeader

需要:RecyclerView列表是分类的,有好多section,每个section下有几个item,要在头部固定一个sticky header来显示section信息,列表滑动要有推动section header 的成果。有些库不反对高度可变的sticky header,看了下大部分都是应用ItemDecoration实现的,于是革新了一个简略的,间接应用即可。能够反对不同高度的header: 比方空字符串header用较小的高度;多行字符串,单行字符串。 间接看下成果: 提供假数据:数据模型 sealed class ItemModel { class SectionHeader(val label: String): ItemModel() class Product(val name: String, val count: Int, val price: Double): ItemModel()}假数据 object FakeData { fun buildData() = mutableListOf<ItemModel>().apply { // 减少一个长字符串label的header add(ItemModel.SectionHeader("This section label is very long, and it contains link. Http://www.should_support_link_clicking.com Please click if you need find more.")) repeat(5) { add(ItemModel.Product("Banana $it", it + 10, 12.99 + it)) } add(ItemModel.SectionHeader(" ")) // 减少一个header label是空字符串的case repeat(6) { add(ItemModel.Product("Apple $it", it + 20, 5.99 + it)) } add(ItemModel.SectionHeader("Section 3")) repeat(3) { add(ItemModel.Product("Orange $it", it + 1, 4.99 + it)) } add(ItemModel.SectionHeader("Section 4")) repeat(5) { add(ItemModel.Product("Orange $it", it + 1, 4.99 + it)) } add(ItemModel.SectionHeader("Section 5")) repeat(7) { add(ItemModel.Product("Orange $it", it + 1, 4.99 + it)) } add(ItemModel.SectionHeader("Section 6")) repeat(3) { add(ItemModel.Product("Orange $it", it + 1, 4.99 + it)) } }}用ItemDecoration实现StickyHeader ...

June 24, 2022 · 4 min · jiezi

关于android:在线文本实体抽取能力助力应用解析海量文本数据

随着信息化的倒退,很多具备重要价值的常识暗藏散布在海量数据中,影响了人们获取常识的效率,如何解决繁冗的非结构化文本数据成为难题。 近日,HMS Core机器学习服务6.5.0版本新增在线文本实体抽取能力,该能力能够检测出文本中是否存在比方日期、姓名、专有名词等实体信息,并将此类实体抽取进去,即主动解决非结构化自然语言文本数据的能力。例如,影视行业的利用中经常会呈现大量文字的影评、资讯等内容,应用在线文本实体抽取能力即可疾速提取构造信息,帮忙搭建常识图谱,便于用户清晰了解。 此外,文本实体抽取能力更多利用于问答零碎、信息索引、常识图谱构建等畛域。 问答零碎问答零碎是信息检索零碎的一种高级模式,它能用精确、简洁的自然语言答复用户提出的问题。在问答零碎实现过程中,则须要用到文本实体抽取能力辨认问题和知识库中的实体信息,再通过多种算法模型匹配出精准答复。 信息索引应用在线文本实体抽取能力,可命名特定实体信息作为索引和超链接。比方用户在评论时提到的专有名词,能够生成超链接,便于其余用户检索理解相干内容。 常识图谱构建常识图谱是由实体、关系和属性组成的一种数据结构,即具备有向图构造的一个知识库,文本实体抽取能力作为常识图谱构建过程中的底层能力,有着极其重要的作用。比方构建音乐常识图谱,首先须要大量的文本数据中提取出歌手、歌曲、作词、影视等相干信息,而后再进行常识图谱的搭建。 目前,华为机器学习服务在线文本实体抽取能力共反对人名、金钱、影视名、网页链接在内的16个实体类别,可依据理论语义场景利用于不同类别的App中。 集成步骤开发筹备具体筹备步骤可参考华为开发者联盟官网。 集成和配置apigateway鉴权基于apigateway的鉴权机制: "paths": {"/entityExtract": { "post": { "operationId": "entityExtract","parameters": [{"in": "body", "name": "req", "required": true,"schema": { "$ref": "#/definitions/NerEnterReq" } }, {"name": "X-Request-ID", "in": "header", "required": true,"type": "string"}, {"name": "X-Package-Name", "in": "header", "required": true,"type": "string" }, ……], "responses": {"200": { "description": "response of 200","schema": { "$ref": "#/definitions/ResponseEntityNerBodyVo"}}}}}创立在线文本实体结构器// 应用自定义的参数配置创立语种检测器。 MLRemoteNerSetting setting = new MLRemoteNerSetting.Factory() .setSourceLangCode("zh") .create();MLRemoteNer ner = MLNerFactory.getInstance().getRemoteNer(setting);进行文本实体抽取。在线获取文本实体抽取异步办法示例代码: ner.asyncEntityExtract(input).addOnSuccessListener(new OnSuccessListener<RemoteNerResultItem[]>() { @Override public void onSuccess(RemoteNerResultItem[] remoteNerResults) { // 胜利的解决逻辑。 if(remoteNerResults != null){ // 有辨认后果 }else { // 辨认后果为空 } } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { // 辨认失败,获取相干异样信息。 try { MLException mlException = (MLException) e; // 获取错误码,开发者能够对错误码进行解决,依据错误码进行差异化的页面提醒。 int errorCode = mlException.getErrCode(); // 获取报错信息,开发者能够联合错误码,疾速定位问题。 String errorMessage = mlException.getMessage(); } catch (Exception error) { // 转换错误处理。 } } });同步办法示例代码: ...

June 23, 2022 · 1 min · jiezi

关于android:官方零基础入门-Jetpack-Compose-的中文课程来啦

作者 / Murat Yener, Android Developer Relations Engineer 在 Android 平台上开发利用蕴藏着许多激动人心的机会: 您能够就此开始一段新的职业生涯,或者以乏味的形式表白本人,也能够发明一个不同凡响的利用,甚至可能开启一段守业旅程。 在 Google,咱们致力于减少人们学习 Android 开发的机会,让更多人体验到 Android 开发的乐趣。为进一步实现这一指标,咱们公布了《Android 之 Compose 开发根底》课程的前两个章节,这是第一个面向所有人的、应用 Jetpack Compose 进行 Android 开发的免费中文课程! Compose 简化并晋升了 Android 界面的开发效率,开发者们可能应用更少的代码、弱小的工具及直观的 Kotlin API,疾速打造利用并将其投入使用。如果您有趣味应用最新的 Android 开发方式来构建原生界面,那么,千里之行始于足下,本课程将是十分好的开始! 与《应用 Kotlin 进行 Android 开发》课程一样,《Android 之 Compose 开发根底》课程将讲述 Kotlin 基础知识。除根底计算机常识外,您无需具备任何编程教训,即可开始学习。本课程不仅涵盖了最新的 Android 利用构建技术,为了让您可能更轻松、更乏味地学习 Android,咱们在设计课程之初,吸取了许多先前 Android 开发课程的学习者、讲师及设计者的反馈。 本课程的学习路线不仅蕴含了对编程根底和 Kotlin 编程语言的教学,还退出了一些额定的开发内容。如果您曾经相熟 Kotlin 编程语言或有相似的编程教训,能够抉择跳过后面的课程,专一于学习如何应用 Jetpack Compose 进行 Android 开发。 《Android 之 Compose 开发根底》和《应用 Kotlin 进行 Android 开发》是咱们最新公布的 Android 培训课程,只管两者的课程构造类似,并且有许多雷同的示例利用,但区别在于应用了不同的界面工具包编写。这样便于您了解、比照、把握 View 和 Compose 之间的差别,您甚至能够同时学习这两门课程。 ...

June 22, 2022 · 1 min · jiezi

关于android:HMS-Core新闻行业解决方案让技术加上人文的温度

开发者们,你心愿用户如何获取新闻? 有的人靠手机弹窗知天下事,有的人则在新闻利用中尽览每一篇文章;有的人一目十行,有的人则喜爱细细咀嚼;有的人被动摸索,有的人则想要利用投其所好。 科技在一直刷新着用户获取新闻的形式,与此同时,用户本身也在收回新的获知需要。HMS Core新闻行业解决方案,为新闻行业提供有声朗诵、手语、文本翻译等能力,用技术的力量给利用削减温度,满足用户多场景下的不同需要。 信息爆炸为人们带来各类目迷五色的内容,也使得新闻浏览变得越来越碎片化。从字字入目到声声动听,随着音频技术的崛起,用耳朵读新闻的风潮未然降临。 HMS Core音频编辑服务为挪动利用提供AI配音能力,可帮忙新闻利用实现有声朗诵。通过深度学习,AI配音能力能够生成多种天然晦涩、情感丰盛的朗诵音色,并将文字合成为情感丰满的朗诵语音。如果说晚期的播送实现了解放双眼听新闻,那么现在的新闻有声朗诵,在解放双眼双手的同时,关上了新闻“浏览”新姿态,用户在路上、在静止、在工作等任何状态时,都能够不受工夫空间束缚,用心仪的音色随时随地获取本人感兴趣的内容。 音频编辑服务面向寰球凋谢,反对70+种语言,提供产品级SDK,接口简略易用、开放性强、稳固牢靠,轻松集成,即可帮忙开发者节俭开发成本,疾速获取能力。 在无声世界里,因为无奈获取音频信息,听障人士难以及时获取社会热点与时事,产生“信息时差”。这让人不禁思考,手语使用者该如何疾速获取新闻资讯呢? HDC 2021上手语数字人灵动的手语表白给不少观众留下深刻印象,也一度引起热议,其背地的HMS Core手语服务,是基于业界当先的深度神经网络技术和手语专家常识,将文本翻译为合乎听障人士表白习惯的手语视频,可用于手语视频媒体的高效制作,帮忙利用构建信息无障碍的环境,为听障人士带来无声的守护。目前,手语服务提供的手语生成能力曾经能够使用于日常交换、新闻和线上教育中。此前,为了保障长春大学特殊教育学院的听障同学们失常线上学习,吉林大学携手长春大学,与HMS Core手语服务开展单干,将手语服务使用到老师授课的视频中,为听障同学们打造了一节暖心课堂,让技术加上了人文的温度,取得了各界统一好评。 如果说有声朗诵和手语新闻解决的是用户如何“看”新闻的问题,那对于新闻内容,用户常遇的一些懊恼,或者能够这样解决! 外语新闻看不懂?HMS Core机器学习服务为新闻利用提供文本翻译能力,反对在线和离线两种形式,将源语言文字翻译为指标语言文字,在线反对中、英、法、德、意、西等39种语言,离线资源包则蕴含50+语种。用户只需一键翻译,即可实现跨语种浏览,防止频繁切换第三方翻译带来的麻烦,晋升利用内体验。 弱网环境下,新闻利用中的图片、视频常呈现加载慢,甚至加载失败的状况,尤其在爆点新闻产生时,“网页申请失败”、“图片加载失败”等经常困扰着用户。HMS Core Network Kit,通过网络预热、缓存、智能网络参数调优等关键技术,升高网络申请时延,缩小用户等待时间,能无效晋升用户体验。 信息时代,新闻业正在与技术建设更深度的附丽关系,而技术自身是一种工具,它为人们带来更便捷、智慧的新闻获取形式时,也该当带来一些和煦和人文关心。HMS Core继续通过凋谢能力,为新闻行业挪动利用注入新动力,期待与更多开发者独特打造更智能更具温度的新闻资讯获取体验。开发者能够登录华为开发者联盟官网,查看更多HMS Core翻新凋谢能力,理解更具体的产品介绍与接入筹备。 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

June 22, 2022 · 1 min · jiezi

关于android:学会使用LiveData和ViewModel我相信会让你在写业务时变得轻松

前言:本文不定时更新,有问题欢送在评论区提出~ 最近更新工夫:2022-06-21 介绍在2017年,那时,观察者模式无效的简化了开发,然而诸如RxJava一类的库有一些太过简单,学习老本太高,为此,LiveData呈现了,一个专用于Android的,具备自主生命周期感知能力的,可观测的数据存储类。同时也呈现了ViewModel这个组件,配合LiveData,更不便的实现MVVM模式中Model与View的拆散。那么就让本文来带大家来学习LiveData与ViewModel的应用吧。 LiveData和ViewModel的关系: 本文的案例代码:https://github.com/taxze6/Jet... LiveData参考资料: 官网文档:https://developer.android.goo... LiveData postValue详解:https://www.cnblogs.com/butto... LiveData是一种可察看的数据存储器类(响应式编程,相似Vue)。与惯例的可察看类不同,LiveData 具备生命周期感知能力。LiveData最重要的是它理解观察者的生命周期,如Activity和Fragment。 因而,当LiveData发送变动时,UI会收到告诉,而后UI能够应用新数据从新绘制本人。换句话说,LiveData能够很容易地使屏幕上产生的事件与数据放弃同步(响应式编程的外围) 应用 LiveData 具备以下劣势:UI与数据状态匹配 LiveData 遵循观察者模式。当底层数据发生变化时,LiveData 会告诉Observer对象。您能够整合代码以在这些 Observer对象中更新界面。这样一来,您无需在每次利用数据发生变化时更新界面,因为观察者会替您实现更新。进步代码的稳定性 代码稳定性在整个应用程序生命周期中减少: 流动进行时不会产生解体。如果应用程序组件处于非活动状态,则这些更改不受影响。因而,您在更新数据时无需放心应用程序组件的生命周期。对于后盾堆栈中的流动,它不会承受任何LiveData事件内存透露会缩小,观察者会绑定到Lifecycle对象,并在其关联的生命周期受到销毁后进行自我清理勾销订阅任何观察者时无需放心如果因为配置更改(如设施旋转)而从新创立了 Activity 或 Fragment,它会立刻接管最新的可用数据。不再须要手动解决生命周期 界面组件只是察看相干数据,不会进行或复原察看。LiveData 将主动治理所有这些操作,因为它在察看时能够感知相干的生命周期状态变动。 数据始终保持最新状态 如果生命周期变为非沉闷状态,它会在再次变为沉闷状态时接管最新的数据。例如,已经在后盾的 Activity 会在返回前台后立刻接管最新的数据。 共享资源 像单例模式一样,咱们也能够扩大咱们的LiveData对象来包装零碎服务,以便它们能够在咱们的应用程序中共享。一旦LiveData对象连接到零碎服务,任何须要资源的观察者能够轻松地观看LiveData对象。 在以下状况中,不要应用LiveData:您须要在信息上应用大量运算符,只管LiveData提供了诸如转换之类的工具,但只有Map和switchMap能够帮忙您您没有与信息的UI交互您有一次性的异步操作您不用将缓存的信息保留到UI中如何应用LiveData一般来说咱们会在 ViewModel 中创立 Livedata 对象,保障app配置变更时,数据不会失落,而后再 Activity/Fragment 的 onCreate 中注册 Livedata 监听(因为在 onStart 和 onResume 中进行监听可能会有冗余调用) 根底应用流程:1.创立一个实例LiveData来保留某种类型的数据。个别在你创立的ViewModel类中实现 class MainViewModel : ViewModel() {    var mycount: MutableLiveData<Int> = MutableLiveData()}2.在Activity或者Fragment中获取到ViewModel,通过ViewModel获取到对应的LiveData class MainActivity : AppCompatActivity() { lateinit var viewModel: MainViewModel override fun onCreate(savedInstanceState: Bundle?) { ...        /**记住相对不能够间接去创立ViewModel实例 肯定要通过ViewModelProvider(ViewModelStoreOwner)构造函数来获取。 因为每次旋转屏幕都会从新调用onCreate()办法,如果每次都创立新的实例的话就无奈保留数据了。 用上述办法后,onCreate办法被再次调用, 它会返回一个与MainActivity相关联的事后存在的ViewModel,这就是保留数据的起因。*/ viewModel = ViewModelProvider(this@MainActivity,ViewModelProvider. NewInstanceFactory()).get(MainViewModel::class.java) }}3.给LiveData增加观察者监听,用来监听LiveData中的数据变动,在Observer的onChanged中应用监听回调数据 ...

June 21, 2022 · 6 min · jiezi

关于android:HMS-Core机器学习服务身份证识别功能实现信息高效录入

在各类App都要进行实名制的当下,进行身份认证天然不可避免。平时购买火车票、飞机票,住酒店、打游戏等都须要身份认证,如果每次都要输出那18位的身份证号非常麻烦,手一抖就会出错。因而,应用华为机器服务身份证辨认性能扫描身份证,录入身份信息就相当不便了。 1. 业务简介HMS Core机器学习服务身份证辨认性能是基于OCR光学字符识别(Optical Character Recognition)技术,从带有身份证信息的图像或视频流中,辨认出带格局的文本信息。通过调用OCR身份证辨认的能力,抽取身份证图片中的要害信息,例如:姓名、性别、证件号等,以json模式输入,从而帮忙用户实现证件信息的疾速录入,省去了用户手动录入的许多麻烦。 身份证辨认部署详情 DEMO演示 2. 场景介绍以后,很多利用须要对客户的身份进行验证,领取类App、出行类App、酒店类App等都须要用户上传本人的身份证照片。HMS Core机器学习服务身份证辨认性能能够对身份证信息做结构化辨认和录入,在保险、金融、电商等须要实名认证的行业中广泛应用,不仅能够升高用户身份证信息录入谬误的危险,还能以便捷的操作晋升用户体验。例如,在金融类App中应用该服务,能够主动精确辨认并录入身份证中的重要信息,无效缩小由用户输出错误信息而导致的业务危险。 3. 性能特点•全字段辨认:精准辨认二代居民身份证正反两面的全副8个字段,充沛满足身份证应用场景中对任意字段的辨认需要。 • 辨认疾速:个别状况下,身份证辨认时延仅为545.9ms,通过疾速辨认,最大水平的进步业务效率,晋升用户体验。 • 高鲁棒性:反对场景较为宽泛,并且在有简单光照、简单背景以及其它烦扰的状况下,仍能保障较高的辨认准确率,尤其是关键字段的辨认准确率高达99.53%。 华为机器学习服务(ML Kit)身份证辨认性能借助了华为在OCR方面的最新研究成果,将来将持续晋升用户交互体验,一直迭代和晋升辨认的准确度和效率,力求出现给宽广开发者可用性更强、体验更佳的优质服务体验。 如何接入华为机器学习服务? 机器学习服务官网为您提供具体的文档领导。 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

June 21, 2022 · 1 min · jiezi

关于android:理解Android中的MeasureSpec

PS:本文系转载文章,浏览原文可读性会更好,文章开端有原文链接 ps:本文源码是基于 Android Api 31 来剖析的 目录 1、MeasureSpec 1、1 SpecMode 1、2 MeasureSpec 的 int 值和 LayoutParams 的对应关系1、MeasureSpec 咱们在 Android 手机上看到的界面,其实就是 View,显示 View 的过程中其实是要通过 View 的测量的,View 的测量就须要用到 MeasureSpec,那么这个 MeasureSpec 是什么呢?MeasureSpec 翻译成中文就是 “测量规格” 或者 “测量说明书” ,MeasureSpec 在肯定水平上决定了一个 View 的尺寸规格,为什么说是肯定水平上?是因为这个过程还受父容器的影响,父容器影响View 的MeasureSpec的创立过程;在测量过程中,零碎会将View的LayoutParams 依据父容器所加限度的规定转换成对应的 MeasureSpec,最初依据这个 MeasureSpec 来测量出 View 的测量宽高。 这里的 MeasureSpec 有2层意思,一种是 MeasureSpec 对象,一种是 MeasureSpec 的 int 值;咱们说一下 MeasureSpec 的 int 值,MeasureSpec 的 int 值是32位的对不对?那好,高2位就是 SpecMode,低30位就是 SpecSize;SpecMode 和 SpecSize 又是什么东东呢?SpecMode 是测量模式,SpecSize 是某种测量模式下的测量大小。 为了更好的了解 MeasureSpec 的 int 值,咱们先看一下 View 的动态外部类 MeasureSpec ; ...

June 20, 2022 · 4 min · jiezi

关于android:华为机器学习服务银行卡识别功能一键实现银行卡识别与绑定

随着科技的倒退,用户通过网络进行在线领取越来越不便。平时上网购物、交水电费、转账汇款等都须要绑定银行卡,但要手动输出16-19位银行卡号,速度慢、易出错始终是线上挪动领取的一个“硬伤”。为了给挪动商业企业的用户打造优质的领取体验,简化操作程序曾经成为晋升企业竞争力的重要伎俩。因而,应用华为机器学习服务银行卡辨认性能,就能很好的解决这一问题。 1. 业务简介HMS Core机器学习服务银行卡辨认服务是利用OCR算法,通过挪动终端拍摄银行卡自动识别银行卡号,而后将辨认内容主动录入零碎的过程。由此,失去银行卡的卡号、有效期、发卡行等重要文本信息,并且反对视频流15度角进行辨认。该服务配合身份证辨认,能够为用户提供实名认证、身份审核、卡号录入等实用功能,升高输出老本,为用户提供更加敌对的操作体验。 DEMO演示 2. 场景介绍以后,很多利用在领取时都须要绑定银行卡,比方银行App、挪动领取App、缴费类App、电商类App等。HMS Core机器学习服务银行卡辨认性能能够疾速实现对用户银行卡信息的结构化辨认,输入带格局的银行卡重要信息,这在金融场景下的身份认证、电商平台的领取绑卡有着宽泛的应用。例如,当用户想要绑定一张银行卡用于网络领取时,应用该服务能够疾速对银行卡信息进行录入,精确高效,大幅升高了手工输出出错的概率,晋升用户体验。 3. 性能特点• 笼罩卡证多:银行卡辨认服务能够疾速辨认卡号等要害信息,笼罩寰球常见卡证类型,包含银联、美国运通、万事达(Mastercard)、Visa 、JCB等。 • 辨认精准、速度快:关键字段辨认准确率达95%以上,均匀辨认一张卡片仅需566ms。 如何接入华为机器学习服务? 华为机器学习服务官网为您提供具体的文档领导。 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

June 20, 2022 · 1 min · jiezi

关于android:扫码服务一图详解

HMS Core 对立扫码服务助力开发者疾速构建利用内扫码性能,让您的业务关键时刻不卡壳。对立扫码服务反对多种接入形式,并对低光照、阴阳码、反光、变形、磨损、遮挡、远距离扫码等简单场景做了针对性优化,晋升扫码成功率,详情请戳下图! 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

June 20, 2022 · 1 min · jiezi

关于android:你应该知道的Android签名知识

前言最近帮测试做了一点对于签名的需要,明天就和各位同学简略聊一聊对于签名的那些事儿。 如果问到 Android 为什么须要签名?大家都可能想到官网的解释: Android 零碎要求所有 APK 必须先应用证书进行数字签名,而后能力装置到设施上进行更新。这是一个比拟含糊的解释,简略来说,有了签名,就能够让 App 和开发者绑定。 毕竟,利用那么多,别的开发者也有可能盗用你的代码,这个时候,包名和你雷同,代码和你雷同,怎么辨别你的 App 和这些人的 App 不是同一个呢? 这个时候数字签名就派上用场了。 一、签名根底想要彻底理解签名常识,咱们得理解以下常识: 音讯摘要数字签名加密数字证书这一系列的常识各位可能在学习网络的时候或多或少的接触过。 咱们简略的学习一下这些常识: 1. 音讯摘要音讯摘要经常被被称为数字摘要或者数字指纹,定义如下: 在原来的数据根底上,通过一个单向的 Hash 计算,失去一个固定的 Hash 值,这就是音讯摘要。常见的摘要算法都有 MD5、SHA-1 和 SHA-256,特点如下: 长度固定,与内容长度无关:比方 MD5 是 128 位、SHA-1 是 160 位、SHA-256 是 256 位。看似随机,其实不随机:同内容两次摘要得出的后果统一单向:只能从原数据得出摘要,不能从音讯摘要得出原来的数据优良的摘要算法很难 Hash 碰撞基于此,音讯摘要经常会被用来查看内容的完整性。 比方咱们下载终点读书,音讯摘要的用法如下: 计算摘要:App 会针对本人的文件信息计算出一个数字摘要比方 123**...**123下载App验证摘要:对下载的 App 再次计算摘要,比方得出的也是 123**...**123,和之前的数字摘要一比照,这就代表我从服务器下载的内容是残缺的,能够失常应用当然,上面值波及了摘要局部,其余过程,咱们前面剖析。 2. 加密算法什么是加密? 百科是这么解释的: 将明文信息扭转为难以读取的密文内容,使之不可读的过程。只有领有解密办法的对象,经由解密过程,能力将密文还原为失常可读的内容。所以啊,加密办法失去的密文是能够转变为明文的,像信息摘要算法比方 MD5 得进去的后果是不可逆的,所以面试官问你们什么事加密算法的时候,你可不能把 MD5 说进去! 加密算法分为两大类,对称加密和非对称加密。 2.1 对称加密对称加密在加密和解密的时候应用的同一把钥匙: 图片来自《一文彻底搞懂加密、数字签名和数字证书!》 2.2 非对称加密非对称加密是应用公钥/私钥中的公钥来加密明文,而后应用对应的私钥来解密密文的过程: 图片来自《一文彻底搞懂加密、数字签名和数字证书!》 简略比照一下对称加密和非对称秘密: 非对称加密对称加密速度慢快效率低高安全性高低常见算法RSA\DHAES\DES\IDEA2.3 应用场景学过网络的同学应该都理解,在 Https 的传输过程中,客户端和服务端应用非对称加密生成对称加密的密钥,而后用对称加密传输网络中的数据。 ...

June 19, 2022 · 2 min · jiezi

关于android:年中总结-|-愿自己更好面对未来-20226

还是老规矩,小意境镇楼。 前段时间转正后,就始终想写个总结,一方面是简略记录下,另一方面也算是新的征程。过后还在好奇,往年的掘金,年中哪儿去了呢? 还好,所有来的刚刚好~ 在开始明天的总结时,说点题外话吧。 题外话不晓得从什么时候起吧,刚开始写文,是因为本人脑子不够用,自我始终的评估都是比拟愚蠢,大佬一分钟,我可能十分钟,或者一小时,再者 long long ago~~~ 所以,也缓缓的在摸索,后续发现写文章是个不错的思路,网上大佬很多,分享的同时也能失去大佬的指导,要害后续面试还能吹吹水。说来也蛮难堪的,去年年末的几家不错公司的面试,都是通过博客的模式发的邀约,惋惜呐,本身打铁不够扎实,不过也算是经验过火焰洗礼的男人了。 回望当初某 N 各种操作,文章莫名被删,对应客服分割无果。自身只想找个平台,简简单单奉献本人的一些工作教训,算是间接回馈一波,毕竟当初也是受到前人栽树的福荫。数次沟通无果后,想着一怒之下删文告辞,看来看去,都是过往经验,删除,多少有些舍不得。 慢慢的转移其余平台,持续默默输入水文。不得不说,刚开始习惯了某 N 的编辑器,对于其余平台,还是蛮不适应。最终的落脚,还是跑到了掘金,眼瞅着的看着社区编辑器各种优化,小细节的更新,编辑器的应用,让人爱不释手。这点不得不为掘金点赞 后续,还是感觉太多的不人性化,懒得找图床,懒得折腾,懒得乌七八糟的各种适应... 随后某次掘金无奈关上,忽然让人莫名慌乱,毕竟水文也算是心血,无奈持续各个平台持续手动同步。 还是真心心愿掘金对于水印这个,能够像某 N 一样,由作者抉择是否开启,当初公司外部 OKR 也有对应博客要求,习惯了掘金的编辑器,感觉内网贼难用,然而每次贴文各种水印还是免不了被大佬找上门锤一顿,真没工夫调整呐... 我也不晓得这些题外话的吐槽会不会导致文章被删,然而还是有说出本人心田想法的权力吧,后续随缘吧。 还是心愿掘金判若两人纯正吧... 总结开始...其实这点还是要感激某 N ,从最后的年终总结始终到当初,也算是慢慢的养成了总结、记录的习惯。 时不时回头看看过往,还是颇有播种。 生存生存总是充斥了太多的不确定性,尽力做好本人,演好每一场。 比拟快乐的一些事儿...比拟好玩、无奈的是,小区接连被封,而大昌平,仍旧每次默默收尾,只是这次覆盖面积略微宽泛一些。 有史以来天天核酸,显著感觉大白从开始的温顺到后续的快准狠。 哈哈哈,都也不容易,放一张期间的朋友圈图吧~ 期间有幸体验了一次大白,一天下来还是蛮累的,也见识到了人与人之间的区别。 整体来说,累并高兴着,当前这样的事件还是要多参加一些,用本人的微薄力量回馈一波~ 对于整体生存而言,前半年始终各种宅。 工作的繁忙、疫情的无奈,抱着不添麻烦的想法,果决持续宅。 生存还是平铺直叙,日复一日,不过相比今年,目前的日子尽管繁忙,然而将来可期~ 比拟 ummm...印象最为粗浅的,或者最想吐槽的便是居家办公的时候,算是彻底加剧了对舍友的恶感和讨厌。 卫生间、厨房物品肉眼可见的损坏...个人卫生,ummm......整个一惨,灭绝师太看了预计都得摇摇头。 敌人劝告,搬家吧,别耗着了。默默回复,你难道遗记之前的舍友怎么评估的我了吗? 铁打的权儿,流水的客...没方法,住工夫久了,真心不想挪窝儿,懒得折腾,哪儿怕公司要搬家,也不违心换个新中央。可能吧,对这个中央还有一些莫名的情愫和留恋,不忍割断。 有的小伙伴可能会说,沟通下呗。就这么举例子吧,比方对方习惯始终吃 x,你去通知它,你应该吃饭呀,那货色怎么能吃呢?对方可能默默白你一眼,心里 xxx。 从一开始的贼恶感、讨厌、闹心、到而今眼里齐全忽视存在,整个心态的巨变,整个的心路历程,颇为崎岖。期间也曾尝试一起造呗,最初想想没必要,算了,还是放弃好本身得了。 不过偶然还是会造作一番,哈哈哈 最不开心的一点就是,因为疫情起因好久没能回家... 最近老家,俗称张一刀,可算是被举报公开了,默默的点个赞~ 这点,确实很难做到了解,针对家乡人,永远一句滚~ 疫情有情,人有情,可始终感触到的都是刺骨的寒... 想法不同,立场不同,体现不同,算求了,总有一天,疫情会滚的,是吧? 工作放弃初心,持续前行。 简谈日常琐碎其实晓得的小伙伴,都理解,去年简直蛮不顺利的,从无良已开张公司来到,到入坑苟延残喘老流氓,再到最初咬牙保持到当初很不错的一家公司,整个过程还是偏于曲折离奇,感兴趣的小伙伴能够翻翻之前的记录,权当一乐子。 面试|2021 菜鸟金三银四铜五 Android 被锤历程出炉...面试 Notes|2021 年秋季 Android 求职记。。。 ...

June 19, 2022 · 1 min · jiezi

关于android:FAQ调用应用内支付SDK时报错如何用tag对问题进行排查和分析

华为利用内领取服务(In-App Purchases,IAP)为开发者提供便捷的利用内领取体验和简便的接入流程。开发者的利用集成IAP SDK后,调用IAP SDK接口,启动IAP收银台,即可实现利用内领取。在集成过程中,开发者可能会遇到报错的问题,这时咱们能够通过查找日志中的tag的办法对问题疾速进行排查和定位,以下咱们会联合两个理论问题来看如何应用这个办法。 问题一:某开发者调用华为利用内领取SDK,拉起收银台页面,提醒“以后领取服务不可用,请稍后再试”。具体参考下图: 问题剖析1.首先咱们确认调用的是IAP哪个接口。 通过查看开发者给的日志咱们发现调用的是非PMS接口(通过过滤IapClientImpl,咱们能够查问调用的接口名) 2.如果是pms,那么调用的收银台接口名为createPurchaseIntent,如果是非pms接口,则调用的接口名为createPurchaseIntentWithPrice。 3.依据对话框提醒领取服务不可用,可能是领取服务api开关未关上或者某些地区不反对领取。依照这个思路咱们进行定位,在日志中搜寻tag: “hms_pay”: 日志显示以后的服务地是法国,但目前利用内领取服务购买非PMS商品只反对中国大陆,所以会提醒领取不可用。 解决办法在利用市场将服务地切换回国内,具体操作如下:利用市场 -> 设置 –> 国家/地区 –> 中国。 问题总结开发者在调试过程中,如果呈现接口不通,或者提醒谬误时,能够应用以下tag来进行问题定位: HMSSDK: 能够通过此tag查问到HMS Core SDK框架侧是否异样,如6003,6004,90713XXXX等错误码,当然也会蕴含IAP SDK侧错误码。如60002,60050等 hms_pay: 如果呈现60002,60050等IAP SDK侧错误码,能够通过IAP APK侧来剖析可能呈现的问题,即能够用该tag进行后续APK侧日志的定位剖析。 Network-Request:这个tag其实也属于hms_pay上面的,属于服务测返回的错误码,咱们能够依据服务侧返回的错误码以及谬误形容,对照服务测文档进行初步排查和定位。如8、9、11、12等错误码。 问题二:某位开发者在调用“isEnvReady“办法时报错,提醒“本利用未在以后国家/地区公布”具体参考下图: 问题剖析首先咱们在日志上查找Tag 为HMSSDK 和 hms_pay, 发现60007错误码,比照业务错误码,提醒商品配置的地区没有散发到该国家。 咱们依据错误码提醒去AGC网站上查问公布国家和地区,发现目前利用公布地设置在欧洲,但以后登录的帐号在中国大陆,所以会提醒该谬误。 解决办法关上AGC网站,在利用上架 –>筹备提交页面,将公布国家或地区勾选上中国大陆(如果想在某个国家或地区上架,须要勾选上对应国家或地区),勾选后点击保留,变更后个别在几个小时内会失效。 问题总结和问题一的定位思路基本一致。依据错误码来进行初步定位。首先要依据客户端错误码判断可能存在的问题,如果咱们曾经拿到对应的客户端错误码,那么依据官网的错误码含意和解决方案解决即可。 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

June 17, 2022 · 1 min · jiezi

关于android:2022-让我带你Jetpack架构组件从入门到精通-Lifecycle

前言不是题目党!作者会尽力把文章写的更容易了解也更充斥深度,本文也随作者的继续学习,继续更新,有问题欢送在评论区提出~最近更新工夫:2022-06-17 介绍Jetpack的正式亮相是在2018年的Google I/O大会上,距今曾经过来了四年,在当初的根底上又多了许多的新组件,每个组件都给开发者提供了一个规范, 可能帮忙开发者缩小样板代码并编写可在各种 Android 版本和设施中统一运行的 代码,让开发者可能集中精力编写重要的业务代码。然而,也有很多Android工程师四年过来了都停留在:晓得、理解过、但没用过。也有很多敌人想要好好学习Jetpack,然而又无奈网上的知识点太过扩散。本系列文章指标就是带大家残缺的学习Jetpack组件,由浅入深。 罕用架构组件图 本系列源码地址:https://github.com/taxze6/Jet... 当初就让咱们进入Jetpack的世界,第一站就是Lifecycle生命周期治理组件! Lifecycle官网文档:https://developer.android.goo... 举荐浏览:深刻了解AAC架构 - Lifecycle整体机制源码 举荐浏览:Lifecycle,看完这次就真的懂了 我置信,在你第一次看见Lifecycle时,你会有上面四个疑难:Lifecycle到底是什么呢?它是用来干什么的?它有什么劣势呢?它要怎么用呢?Lifecycle是什么:life:生命,(某事物)的存在期cycle:周期Lifecycle就是生命周期的意思。它是一个生命周期感知型组件,用来感知响应别的组件,例如感知Activity和Fragment的生命周期状态的变动。 Lifecycle用来干什么: Lifecycle可能主动感知其余组件的生命周期,可能升高组件之间的耦合性。在android开发中,生命周期这个词很重要,因为内存透露和它有很大很大的关系,内存透露的最次要起因是因为对象的内存无奈被回收,短生命周期对象被长生命周期对象所援用时,短生命周期对象不应用时无奈被回收…..状况下,就造成了内存透露。(此处留个坑,兴许当前会写对于内存透露如何解决方面的常识,当初大家能够先看其余材料学习) 大家此时心里会想,我要治理生命周期,然而android的activity不是自带了生命周期的函数吗,我在它外面批改不就行了,你要说有耦合,那全抽到Base类中不就好了。方法总是有的嘛~ 的确,在平时开发时,咱们会封装一个BaseActivity,而后让所有的Activity都继承于它。BaseActivity个别会覆写onCreate、onStart 、onResume、onPause、onStop、onDestroy以及onRestart函数,并在其中加上日志信息,不便察看每个流动的各种状态。咱们能够想到封装BaseActivity,那么官网必定也会想到,于是就呈现了Lifecycle。 lifecycle有什么劣势呢?既然,咱们本人封装BaseActivity就根本可能治理生命周期了,那么官网为何还要 推出Lifecycle这个组件呢? 劣势: Lifecycler实现了执行的逻辑和流动的拆散,代码解耦并且减少了代码的额可读性Lifecycler在流动完结时自定移除监听,防止了申明周期的问题如何应用Lifecycle呢?先来理解一下lifecycle的外围类: Lifecycle Lifecycle是一个抽象类,实现子类为LifecycleRegistry ```kotlinclass LifecycleRegistry extends Lifecycle{ .......}```lifecycleRegister lifecycle的惟一子类,用于在生命周期变动时触发本身状态和相干观察者的订阅回调逻辑 LifecycleOwner 用于连贯有生命周期的对象 public interface LifecycleOwner {@NonNull    Lifecycle getLifecycle();}LifecycleObserver Lifecycle观察者 State(Lifecycle的抽象类外部) 示意以后生命周期所处状态 public enum State { DESTROYED, INITIALIZED, CREATED, STARTED, RESUMED; public boolean isAtLeast(@NonNull State state) {        return compareTo(state) >= 0; }}Event(Lifecycle的抽象类外部) ...

June 17, 2022 · 3 min · jiezi

关于android:运营速进如何在电商大促过节而不是渡劫……

导语:618电商大促降临之际,有些经营还在挠头,有些经营曾经偷偷把握了数据分析窍门,一个胜利的经营背地都有着…… 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

June 16, 2022 · 1 min · jiezi

关于android:一个便捷操作的Android可视化规范检查

Hello啊各位铁子,明天带来一个本人开源的可视化标准查看工具,真正的懒人必备!让标准查看回归最简略,最便捷的操作流程,别说开发人员,就是一个小白也能针对我的项目进行纯熟的标准查看操作,我先贴下地址,前面解说实现过程。 我的项目开源地址: https://github.com/AbnerMing8... 目前工具有九个性能,蕴含了,正文,类,办法,变量等根本的标准验证,如下图所示,当然也都是一些常见的标准性能查看,后续的话也会进行拓展,尽管此标准是依照我公司的规范去执行的,其实,Android嘛,大差不差,就那些标准,根本百变不离其宗,如果有不是很合乎的,大家也能够在源码中进行更正为本人须要的就能够了。 我的项目运行效果图: 我的项目呢,没有抉择打包进行公布,因为思考到各个我的项目,各个公司的标准不一,打包的话不符合实际的开发需要,所以啊,各位铁子,大家能够down下我的项目,依照流程本人运行我的项目,而后查看理论的性能成果,当然了,你也能够针对本人公司标准,进行减少或批改已有的逻辑,使其合乎本公司的标准流程措施。 标准这个货色,我置信大家的公司都会有,俗话说无规矩不成方圆,一个我的项目要是没有标准,每个人都依照本人的思路去编写,长此以往,大家能够想想,这样的我的项目会呈现什么问题?这里我就不明说了,所以啊,标准是一个我的项目的基石,也是掂量一个我的项目,是否强壮,稳固,可保护的规范,堪称是相当重要的。 既然了有了这样的一套标准,那么在执行的时候,就须要去进行验证,毕竟协同开发的我的项目,每个人都有本人的一套开发规范,有时因为粗心或忽略,可能某一块就没有依照既定的标准去落实,那么就须要进行斧正进去,而后进行批改,同样的新人接手我的项目,或是外包人员染指开发,就更应该进行标准的查看,从而让我的项目在一套规范的体系中运行。 其实市面上的标准查看工具颇多,像Lint,CheckStyle等等,要么须要肯定的配置依赖,要么没有一个能够定制化的标准执行,大多数和理论的业务多多少少有些差距,基于此现状,这也是这个工具诞生的起因。工具的诞生,旨在简略便捷,进步咱们的开发效率,节约咱们的工夫老本,使得我的项目稳固,可保护,基本上初衷便是如此,当然也是依照这样的准则去落实的。 Ok,侃了有点多了,说一说实现的思路吧,这个可视化的工具,是用electron进行开发的,和那个代码生成工具一模一样,大家感兴趣的话,能够持续看,不感兴趣的话,就别看了,因为和Android常识关联性不大,[手动捂脸],间接去Github间接下载体验吧。 Electron我就不多说了,因为之前在介绍代码生成工具时,说了很多了,根本都是采纳最根本的web语言去开发的,这里就不过多赘述了,简略的说几点实现思路。 一、 定位我的项目定位我的项目,就是须要抉择一个能够执行的Android我的项目,这是实现性能的第一步,没有我的项目,上面的所有性能根本无奈发展。 抉择我的项目,基本上是抉择一次,在根底配置页面进行保留,而后,每个性能页面首先遍历出我的项目下所有存在的Module,进而针对不同Module做针对性检测。 关上一个目录应用到的是electron/ remote中的dialog模块,具体应用如下: //引入const dialog = require('@electron/remote').dialog;//抉择文件 dialog.showOpenDialog({ title: '请抉择您的我的项目文件,尽量是Android我的项目哦~', properties: ['openDirectory'] }).then(result => { const path = result.filePaths; if (path != null && path != "") { //抉择后回显 $(".config_file_input").val(path); //进行保留门路 localStorage.setItem("select_path", path) } });通过以上的代码,咱们就能够针对抉择的门路进行保留,目前呢,只是定位到了我的项目,上边说了,咱们是须要定位到Module的,如何进行定位到Module,如下代码: 这里用到了fs模块,之前在讲述主动生成代码工具的时候也说过,就不多赘述了。 //引入fs模块let fs = require('fs');//取出存储的门路,不为空,进行遍历文件if (selectPath !== "" && selectPath !== null) { //遍历文件 fs.readdir(selectPath, function (err, files) { if (err) { console.log(err); return } //length 为0 证实,抉择的文件门路下是空的,暗藏抉择目录选项 if (files.length === 0) { isEmptyDir = true; $(".data_select_file").css("display", "none"); return; } //不为空,就遍历以后门路下的所有的文件目录 var isDir = false; files.forEach(function (item, position) { let path = selectPath + "/" + item; fs.stat(path, function (err, stats) { if (err) { return false; } if (stats.isDirectory()) { isDir = true; } //最初一个判断 if (position === files.length - 1) { //没有一个文件夹,暗藏 if (!isDir) { isEmptyDir = true; $(".data_select_file").css("display", "none"); } } //检测抉择的是否是一个Android我的项目,通过是否蕴含app,gradle,settings.gradle,当然也能够判断其余 if (item === "app" || item === "gradle" || item === "settings.gradle") { numAndroid++; } //判断是文件夹 if (stats.isDirectory() && item != "build" && item != "gradle" && item.indexOf(".") != 0) { let nodeDiv = "<option value='" + item + "'>" + item + "</option>" $(".data_file").append(nodeDiv); } }); }); }); }基本上,所有的性能,都是基于以上逻辑的。 ...

June 16, 2022 · 1 min · jiezi

关于android:Android车载多媒体与MediaSession框架

一、多媒体利用架构1.1 音视频传统利用架构通常,传统的播放音频或视频的多媒体利用由两局部组成: 播放器:用于排汇数字媒体并将其出现为视频和/或音频;界面:带有用于运行播放器并显示播放器状态(可选)的传输控件; 在 Android 利用开发中,从零开始构建本人的播放器还能够思考以下选项: MediaPlayer :提供准系统播放器的基本功能,反对最常见的音频/视频格式和数据源。ExoPlayer :一个提供低层级 Android 音频 API 的凋谢源代码库。ExoPlayer 反对 DASH 和 HLS 流等高性能性能,这些性能在 MediaPlayer 中未提供。家喻户晓,如果要在利用的后盾持续播放音频,最常见的形式就是把 Player 搁置在 Service 中,Service 提供一个 Binder 来实现界面与播放器之间的通信。然而,如果遇到锁屏时,如果要与 Service 之间进行通信就不得不用到 AIDL 接口/播送/ContentProvider 来实现与其它利用之间的通信,而这些通信伎俩既减少了利用开发者之间的沟通老本,也减少了利用之间的耦合度。为了解决下面的问题,Android 官网从 Android5.0 开始提供了 MediaSession 框架。1.2 MediaSession 框架MediaSession 框架标准了音视频利用中界面与播放器之间的通信接口,实现界面与播放器之间的齐全解耦。MediaSession 框架定义了媒体会话和媒体控制器两个重要的类,它们为构建多媒体播放器利用提供了一个欠缺的技术架构。 媒体会话和媒体控制器通过以下形式互相通信:应用与规范播放器操作(播放、暂停、进行等)绝对应的预约义回调,以及用于定义利用独有的非凡行为的可扩大自定义调用。 媒体会话媒体会话负责与播放器的所有通信。它会对利用的其余局部暗藏播放器的 API。零碎只能从管制播放器的媒体会话中调用播放器。 会话会保护播放器状态(播放/暂停)的示意模式以及播放内容的相干信息。会话能够接管来自一个或多个媒体控制器的 回调 。这样,利用的界面以及运行 Wear OS 和 Android Auto 的配套设施便能够管制您的播放器。响应回调的逻辑必须保持一致。无论哪个客户端利用发动了回调,对 MediaSession 回调的响应都是雷同的。 媒体控制器媒体控制器的作用是隔离界面,界面的代码只与媒体控制器(而非播放器自身)通信,媒体控制器会将传输管制操作转换为对媒体会话的回调。每当会话状态发生变化时,它也会接管来自媒体会话的回调,这为自动更新关联界面提供了一种机制,媒体控制器一次只能连贯到一个媒体会话。 当您应用媒体控制器和媒体会话时,就能够在运行时部署不同的接口和/或播放器。这样一来,您能够依据运行利用的设施的性能独自更改该利用的外观和/或性能。 二、MediaSession2.1 概述MediaSession 框架次要是用来解决音乐界面和服务之间的通信问题,属于典型的 C/S 架构,有四个罕用的成员类,别离是 MediaBrowser、MediaBrowserService、MediaController 和 MediaSession,是整个 MediaSession 框架流程管制的外围。 MediaBrowser:媒体浏览器,用来连贯媒体服务 MediaBrowserService 和订阅数据,在注册的回调接口中能够获取到 Service 的连贯状态、获取音乐数据,个别在客户端中创立。MediaBrowserService:媒体服务,它有两个要害的回调函数,onGetRoot(管制客户端媒体浏览器的连贯申请,返回值中决定是否容许连贯),onLoadChildren(媒体浏览器向服务器发送数据订阅申请时会被调用,个别在这里执行异步获取数据的操作,而后在将数据发送回媒体浏览器注册的接口中)。MediaController:媒体控制器,在客户端中工作,通过控制器向媒体服务器发送指令,而后通过 MediaControllerCompat.Callback 设置回调函数来承受服务端的状态。MediaController 创立时须要受控端的配对令牌,因而须要在浏览器连贯胜利后才进行 MediaController 的创立。MediaSession:媒体会话,受控端,通过设置 MediaSessionCompat.Callback 回调来接管 MediaController 发送的指令,收到指令后会触发 Callback 中的回调办法,比方播放暂停等。Session 个别在 Service.onCreate 办法中创立,最初需调用 setSessionToken 办法设置用于和控制器配对的令牌并告诉浏览器连贯服务胜利。其中,MediaBrowser 和 MediaController 是客户端应用的,MediaBrowserService 和 MediaSession 是服务端应用的。因为客户端和服务端是异步通信,所以采纳的大量的回调,因而有大量的回调类,框架示意图如下。 ...

June 15, 2022 · 7 min · jiezi

关于android:五个关键问答解读金融App应用安全热点话题

摘要:金融App的利用平安是多方关注的重点 注释: 金融App波及大量资金变动,它的利用平安是多方关注的重点。平安建设,意识后行,只有真正了解利用平安的重要性并晓得如何付诸实践,能力守好用户的数字钱袋。HMS Core 平安检测服务为你多角度解读对于金融App利用平安的热点话题,并提供可上手体验、疾速集成的利用平安凋谢能力。 HMS Core平安检测服务官网:请点击

June 15, 2022 · 1 min · jiezi

关于android:AS-Notes|记录日常开发遇到的-AS-问题不断更新

咱们走过了青春,却离别在了秋季。。。先放一张目前 Android Studio 版本图: PS:说实话不太喜爱这个掘金图片打标记的状况,不不便前期同步,懒得搞图床啥的,还是倡议和 CSDN 学习下,是否给个开关,由作者去抉择是否给图片加对应的标记。 占楼,看了下掘金之前草稿箱呈现图片失落状况,先发文,后续缓缓更新... 这里仅记录集体遇到的一些 AS 问题以及验证胜利的解决形式,当然每个人环境或者其余状况不太一样,这个看集体状况而定吧。 望体谅。。。 1、Git 显示乱码 之前呈现过这个问题,次要是因为字体起因,这次尝试一波: 抉择字体之后,点击 Apply 并 Ok,再回头看: 2、Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.谬误日志如下: Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.You can try some of the following options: - changing the IDE settings. - changing the JAVA_HOME environment variable. - changing `org.gradle.java.home` in `gradle.properties`.Gradle settings根目录下输出如下命令查看版本信息: ...

June 15, 2022 · 3 min · jiezi

关于android:HMS-Core-视频编辑服务开放模板能力助力用户一键Get同款酷炫视频

前言短视频模板,是快捷创作短视频的一种形式,个别由业余设计师或模板创作人制作,用户只需替换视频模板中的局部素材,便可生成一支与模板一样的创意视频。这种省时省力、无需“烧脑”构思创意的“套模板”视频创作方法,深受用户青睐。 利用场景短视频模板在短视频APP、视频剪辑工具、拍摄丑化工具、游览出行、电商、新闻等垂域利用宽泛。例如: 在视频剪辑工具、拍摄丑化工具垂域,短视频模板性能能够升高视频剪辑门槛、激发用户创作,进而晋升利用的用户活跃度; 在游览出行利用中,用户能够通过“套模板”的形式用视频记录旅途中的风土人情; 在电商利用中,商家可通过套用商品展现模板的形式,疾速制作商品展现视频; 在新闻资讯利用中,用户可套用新闻模板,疾速发布新闻讯息。 华为HMS Core视频编辑服务模板能力HMS Core视频编辑服务近期凋谢了模板性能,并预置了一些不同场景的视频模板供开发者测试应用,后续还将陆续丰盛模板品类和数量。 接入简略、省时省力HMS Core视频编辑服务提供了涵盖模板栏目列表、模板详情、模板工程、导入导出等具体的开发接口、接口阐明和接入步骤,代码简略、清晰,开发省时省力。 云端治理、高效经营HMS Core视频编辑服务在AGC后盾为开发者提供了编排素材的后盾,经营人员能够在web端实现模板栏目编排、标签治理、国家/地区设置、高低架模板内容、疾速检索查问信息等。 集成代码1. 开发筹备具体筹备步骤可参考华为开发者联盟官网 2. 编辑工程集成2.1 设置利用的鉴权信息 能够通过api_key或者Access Token来设置利用鉴权信息。 通过setAccessToken办法设置Access Token,在利用启动时初始化设置一次即可,无需屡次设置。 MediaApplication.getInstance().setAccessToken("your access token");通过setApiKey办法设置api_key,在利用启动时初始化设置一次即可,无需屡次设置。 MediaApplication.getInstance().setApiKey("your ApiKey");2.2设置惟一标识ID,即License ID。 License ID是进行管控的无效凭证,您要保障设置License ID的唯一性。 MediaApplication.getInstance().setLicenseId("License ID");2.2.1初始化Editor运行环境 创立编辑工程,须要首先创立Editor对象并初始化其运行环境。当来到编辑工程时,应开释Editor实例。 (1) 创立Editor对象 HuaweiVideoEditor editor = HuaweiVideoEditor.create(getApplicationContext());(2) 指定预览窗口的布局地位 预览窗口负责视频图像画面的渲染,由视频编辑原子能力SDK外部创立SurfaceView来实现。在创立窗口之前,须要在您的App中指定预览窗口的布局地位。 <LinearLayout android:id="@+id/video_content_layout" android:layout_width="0dp" android:layout_height="0dp" android:background="@color/video_edit_main_bg_color" android:gravity="center" android:orientation="vertical" />// 指定预览窗口 LinearLayout mSdkPreviewContainer = view.findViewById(R.id.video_content_layout);// 设置预览窗口承载的布局 editor.setDisplay(mSdkPreviewContainer);(3) 初始化运行环境,如果License鉴权失败,会抛出LicenseException。 当Editor对象创立之后,此时还没有占用理论的系统资源,须要手动抉择其环境初始化的机会,此时视频编辑原子能力SDK外部会创立必须的线程和定时器等。 try { editor.initEnvironment(); } catch (LicenseException error) { SmartLog.e(TAG, "initEnvironment failed: " + error.getErrorMsg()); finish(); return; }3. 模板能力集成// 获取模板栏目列表final HVEColumnInfo[] column = new HVEColumnInfo[1];HVETemplateManager.getInstance().getColumnInfos(new HVETemplateManager.HVETemplateColumnsCallback() { @Override public void onSuccess(List<HVEColumnInfo> result) { // 获取模板栏目列表胜利 column[0] = result.get(0); } @Override public void onFail(int error) { // 获取模板栏目列表失败 }});// 获取模板详情final String[] templateIds = new String[1];// size为须要申请数据的数量 > 0,offset为须要申请数据的偏移量 ≥ 0,true代表强制获取网络数据HVETemplateManager.getInstance().getTemplateInfos(column[0].getColumnId(), size, offset, true, new HVETemplateManager.HVETemplateInfosCallback() { @Override public void onSuccess(List<HVETemplateInfo> result, boolean hasMore) { // 获取模板详情胜利 HVETemplateInfo templateInfo = result.get(0); // 获取模板ID templateIds[0] = templateInfo.getId(); } @Override public void onFail(int errorCode) { // 获取模板详情失败 }});// 待获取模板详情胜利后,获取模板IDString templateId = templateIds[0];// 获取模板工程final List<HVETemplateElement>[] editableElementList = new ArrayList[1];;HVETemplateManager.getInstance().getTemplateProject(templateId, new HVETemplateManager.HVETemplateProjectCallback() { @Override public void onSuccess(List<HVETemplateElement> editableElements) { // 获取胜利后跳转到抉择资源界面,把选中的本地资源门路更新到editableElements editableElementList[0] = editableElements; } @Override public void onProgress(int progress) { // 获取进度 } @Override public void onFail(int errorCode) { // 获取失败 }});// 筹备模板工程HVETemplateManager.getInstance().prepareTemplateProject(templateId, new HVETemplateManager.HVETemplateProjectPrepareCallback() { @Override public void onSuccess() { // 筹备模板工程胜利,能够生成HuaweiVideoEditor实例进行播放、预览、导出等操作 } @Override public void onProgress(int progress) { // 筹备进度 } @Override public void onFail(int errorCode) { // 筹备失败 }});// 在模板筹备胜利后,生成HuaweiVideoEditor实例// 领有editor之后就能够进行播放或者导出操作,详情见播放工夫线和导出HuaweiVideoEditor editor = HuaweiVideoEditor.create(templateId, editableElementList[0]);try { editor.initEnvironment();} catch (LicenseException e) { SmartLog.e(TAG, "editor initEnvironment ERROR.");} Demo演示 ...

June 14, 2022 · 2 min · jiezi

关于android:独立开发者的灵感周刊-DecoHack-011

本周刊记录乏味好玩的独立产品相干内容,每周公布,记得在竹白订阅产品举荐Pixcall - 资源管理软件,针对设计师、视频编辑这个群体管理大量本地图片、视频素材。产品团队之前是做花瓣网的,花瓣卖给稿定设计后几个核心成员就做了这个。满足相似需要的头部产品是台湾的独立开发者 Augus 做的 Eagle。做得比拟早,设计师群体里口碑不错。Pixcall 的竞争劣势是:本地性能是永恒收费的,另外资料库和电脑文件夹是一一对应(不是公有的文件治理形式)这个做的很好,并且原生反对多端同步,后续很快会推出团队版本。 Memorizer - 记录本人货色的一个软件:好书、必看电影或连续剧、食谱、餐厅。想法很不错,看上去很豆瓣。反对 Android 和 iOS。这类产品也能够做成简略的工具开始,开发成本也很低,能够做增值,能够做流量,不过设计要很难看,要辨别展现不同内容的款式,做的好的话是一个很有设想空间的一个产品。能间接看出这个产品有很强的社交能力。 WidgetCat - 独立开发者邢增兴的最新作品,设计的挺不错的。这类小组件的产品次要做的就是个性化,这类产品永远都有市场,5年前 PriceTag 对作者做过一个采访,作者的微博:西瓜亮亮。 Bento - 待办事项清单软件,这类效率产品十分多,很卷的一个品类,各种个性化的产品,这个就是一个,也不能说适度设计,简略的性能,加上一些场景和设计,再有一个很好的交互就是一个很不错的产品。做这类产品肯定要晓得本人的劣势是什么。这个产品将每个便当盒的工作限度为3项。很不错。 toools.design - 一个设计资源的导航网站,有标注免费和收费。 strike.market - 这是一个投资剖析的网站,次要是看美股市场,除了惯例的实时交易信息外,还能够看到公司或者产品相干的一些信息,比方公司剖析,社交热度,谷歌趋势,搜寻记录统计等。比方会通知你游戏公司下载了多少应用程序?排名、流量、每月访问量等。内容十分多,自行钻研。 DoneMyBit - 一个待办事项的网站利用,很简洁。没其余特点。 油谷 - 查问全国油价和寰球原油价格的应用程序。国内开发者的小产品。Super Headache - 记录你明天是不是头痛。这个产品极简到让我狐疑是怎么可能过苹果审核的。Resquire - 面向自由职业者的开发票的服务。这种服务在国外还是挺不便的。一个很简略的 Saas 服务。r3DPhoto - 用手机扫描3D模型的软件。 官网 。What human food can dogs eat - 这个网站能够查狗能够吃什么人类食物,又是一个很有意思的网站,看上去很鸡肋,然而还真的有用。开源我的项目OpenSea downloader - 用来下载最大的 NFT 交易市场上的内容。 开发,开源的,自行体验,让我想起来闲鱼上很多打包卖 NFT 的,也挺讥刺的2333,在国内什么都能够上闲鱼。 Loaders UI Ball - 一个收费开源的 React.js 组件库,加载动画库。用 HTML、CSS 和 SVG 构建。拿来主义福利。 ...

June 13, 2022 · 1 min · jiezi

关于android:版本发布公告HMS-Core650来啦

新 能 力3D Engine3D Engine提供高性能、高画质、高扩展性的实时3D引擎,并提供便捷高效的可视化开发工具。开发者可基于华为的3D Studio开发工具,通过图形和渲染、动画、UI等功能模块,打造高品质的3D利用。同时引擎也凋谢三方插件的能力,致力协同寰球图形畛域的搭档钻研翻新技术。目前反对Windows和Linux平台。 查看详情>> 新 特 性视频编辑服务 Video Editor Kit1.原子能力SDK在AI算法内新增一键动效能力。实现风景图片中天空、水面的动态效果,反对设置画面整体动态效果的静止速度和静止方向; 2.原子能力SDK在AI算法内新增精彩片段能力。可基于时长、标签、美学评估、人物表情等素材内容分析,智能辨认并宰割视频镜头,一键提取视频精彩片段; 3.原子能力SDK新增模板能力。反对查问在线视频模板,应用模板一键合成精彩视频。 查看详情>> 音频编辑服务Audio Editor Kit1.反对设置自定义导出音频文件的门路,满足用户的个性化导出需要; 2.音源拆散端侧新增拆散乐器品种钢琴、电吉他和吉他,达到更粗疏的音乐拆散成果。 查看详情>> 手语服务SignPal Kit新增手语口型生成个性。依据语言语境,生成合乎听障人士表白习惯的口型动作,使得手语表白更加活泼,便于了解。 查看详情>> 静止衰弱服务Health Kit1.数据凋谢实时性晋升。体重、血糖、静止记录、睡眠记录等单次测量数据,数据实时性从1小时晋升到1分钟,助力开发者及时获取到最新数据; 2.睡眠类型新增零星小睡性能。反对入睡工夫、出睡工夫、睡眠时长数据凋谢,帮忙用户监测睡眠衰弱数据; 3.端侧新增游泳、登山、滑雪等20类静止类型,反对丰盛的静止场景; 4.端侧新增反对静止类利用后盾保活性能。反对后盾保活的静止记录API,即用户在锤炼过程中利用放弃后盾运行,从而实现静止记录不间断(以后仅反对华为手机); 5.端侧静止采样数据新增桨频、功率、游泳划水频率、SWOLF四种类型,为开发者提供更多类型的数据凋谢; 6.云侧新增反对南向GPRS设施接入,反对设施的绑定和解绑; 7.云侧新增反对最大摄氧量静止采样数据凋谢。 查看详情>> 机器学习服务ML KitAndroid版本: 1.新增在线文本实体抽取能力,能够检测出文本中是否存在人名、专有名词等具备特定意义的实体,如日期、电话号码、快递单号、影视名等。同时高亮实体信息,进步文本浏览效率;不便用户疾速复制粘贴,如电话号码的疾速获取;利于用户信息提取,如快递单地址辨认;便于构建常识图谱,如构建简单人物关系图谱; 2.在线文本翻译新增马拉地语、古吉拉特语、旁遮普语、泰卢固语4个语种; 3.语音合成服务新增中英文男女4种音色; 4.语音合成服务新增阿拉伯语、土耳其语2个语种; HarmonyOS版本: 1.新增在线语种检测、在线文本翻译、实时语音辨认、实时语音转写能力。 查看详情>> 新 资 源广告服务Ads Kit1.示例代码hms-ads-demo-javascript批改版本适配问题,新增激活揭示弹框的性能; 2.ppsads.setGlobalRequestConfig(object)办法中新增appInstalledNotify和appActivateStyle参数,用于激活揭示弹框设置和弹框款式设置。 拜访Gitee>> 钱包服务Wallet Kit1.示例代码hms-wallet-clientdemo-android 降级Wallet SDK的依赖组件; 2.targetSdkVersion降级30,适配Android R。 拜访Gitee>> 全量版本更新。点击查看详情>> 理解更多详情>> 拜访华为开发者联盟官网 获取开发领导文档 华为挪动服务开源仓库地址:GitHub、Gitee 关注咱们,第一工夫理解 HMS Core 最新技术资讯~

June 13, 2022 · 1 min · jiezi

关于android:机器学习服务助应用内文本语种在线和离线检测

当用户有跨语种交换或内容翻译的需要时,利用须要能自动检测文本的语种再进行翻译。 HMS Core机器学习服务的语种检测服务提供在线语种检测和离线语种检测,既反对检测单语种文本,也反对检测混合语种文本,涵盖南非荷兰语、阿拉伯语等百种语言。接入语种检测服务,App能够轻松实现翻译语种检测、网页语种检测,混合语种场景中语种检测等,帮忙App晋升用户体验。 语种检测流程输出文本,机器学习服务语种对该文本主动进行语种进行检测,而后返回对应语种编码和相应的置信度,或者返回一个置信度最高的语种编码给开发者的利用。最终在开发app页面呈现出翻译出的文本。 成果演示 1.开发筹备在进行开发前须要配置HMS Core SDK的Maven仓地址 repositories { maven { url'https://cmc.centralrepo.rnd.huawei.com/artifactory/product_maven/' }}集成在线语种检测服务SDK,示例代码如下 dependencies{ implementation 'com.huawei.hms:ml-computer-language-detection:3.4.0.301'}2. 编辑工程集成2.1设置利用的鉴权信息 能够通过api_key或者Access Token来设置利用鉴权信息。通过setAccessToken办法设置Access Token,在利用启动时初始化设置一次即可,无需屡次设置。MLApplication.getInstance().setAccessToken("your access token");通过setApiKey办法设置api_key,在利用启动时初始化设置一次即可,无需屡次设置。MLApplication.getInstance().setApiKey("your ApiKey");2.2 创立语种检测器 // 形式一:应用默认的参数配置创立语种检测器。MLRemoteLangDetector mlRemoteLangDetector = MLLangDetectorFactory.getInstance() .getRemoteLangDetector();// 形式二:应用自定义的参数配置创立语种检测器。MLRemoteLangDetectorSetting setting = new MLRemoteLangDetectorSetting.Factory() // 设置语种检测的最低置信度阈值。 .setTrustedThreshold(0.01f) .create();MLRemoteLangDetector mlRemoteLangDetector = MLLangDetectorFactory.getInstance() .getRemoteLangDetector(setting);2.3 进行语种检测 异步办法示例代码 // 形式一:返回多个语种检测后果,包含语种编码以及置信度,sourceText示意待检测的文本,长度需小于5000个字符。Task<List<MLDetectedLang>> probabilityDetectTask = mlRemoteLangDetector.probabilityDetect(sourceText);probabilityDetectTask.addOnSuccessListener(new OnSuccessListener<List<MLDetectedLang>>() { @Override public void onSuccess(List<MLDetectedLang> result) { // 胜利的解决逻辑。 }}).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { // 失败的解决逻辑。 // Recognition failure. try { MLException mlException = (MLException)e; // 获取错误码,开发者能够对错误码进行解决,依据错误码进行差异化的页面提醒。 int errorCode = mlException.getErrCode(); // 获取报错信息,开发者能够联合错误码,疾速定位问题。 String errorMessage = mlException.getMessage(); } catch (Exception error) { // 转换错误处理。 } }});// 形式二:返回置信度最高的语种编码,sourceText示意待检测的文本,长度需小于5000个字符。Task<String> firstBestDetectTask = mlRemoteLangDetector.firstBestDetect(sourceText);firstBestDetectTask.addOnSuccessListener(new OnSuccessListener<String>() { @Override public void onSuccess(String s) { // 胜利的解决逻辑。 }}).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { // 失败的解决逻辑。 // Recognition failure. try { MLException mlException = (MLException)e; // 获取错误码,开发者能够对错误码进行解决,依据错误码进行差异化的页面提醒。 int errorCode = mlException.getErrCode(); // 获取报错信息,开发者能够联合错误码,疾速定位问题。 String errorMessage = mlException.getMessage(); } catch (Exception error) { // 转换错误处理。 } }});同步办法示例代码 ...

June 13, 2022 · 2 min · jiezi

关于android:第一个Android程序-Android开发期末复习

API等级是Android零碎中用来标识API框架版本的一个整数,用来辨认Android程序的可运行性 ADT:Android developer tools src目录:源代码目录 gen目录:保留ADT主动生成的java文件 assets目录:用来寄存原始格局的文件 bin目录:保留编译过程中产生的文件 res目录:资源目录 drawable-ldpilayout目录values目录

June 11, 2022 · 1 min · jiezi

关于android:Android-生命周期-Android开发期末复习6

Android 生命周期 是从程序启动到程序终止的全副过程 前台过程可见过程服务过程后盾过程空过程Android零碎的四个重要组件Activity:可视化的用户界面Service:后盾运行Broadcase receiver:承受并相应播送音讯Content provider:共享数据 Activity生命周期指Activity从启动到销毁的过程栈:后进先出的形式 四种状态活动状态->暂停状态->进行状态->非活动状态 3种生命周期齐全生命周期可视生命周期流动生命周期

June 10, 2022 · 1 min · jiezi

关于android:FAQ运动健康服务REST-API接口使用过程中常见问题和解决方法总结

华为静止衰弱服务(HUAWEI Health Kit)为三方生态利用提供了REST API接口,通过其接口可拜访数据库,为用户提供静止衰弱类数据服务。在理论的集成过程中,开发者们可能会遇到各种问题,这里咱们将典型问题进行分享和总结,心愿为其余遇到相似问题的开发者提供参考。 1. 注册订阅告诉能力后,连通性查看失败在注册成为订阅者后,测试连通性查看回调告诉地址时,提醒“连通性查看失败,连通性查看响应非204”。 起因剖析:在回调告诉地址能够拜访的状况下,须要开发者确认订阅的回调告诉地址的HTTP状态码是否为204,否则将返回404示意回调地址连通性测验失败。 参考订阅数据文档 解决方案:查看链接是否可用,且返回的状态码是否为204。 2. 采样数据统计接口返回的步数总和与获取步数明细数据后本人计算的总和不统一用采样数据统计查问接口获取步数总和 统计查问接口:https://health-api.cloud.huaw... 申请参数: { "polymerizeWith": [ {": 1651809600000, "startTime": 1651766400000, "groupByTime": { "groupPeriod": { "timeZone": "+0800", "unit": "day", "value": 1 } }}最终返回的步数后果为7118 用采样数据明细查问接口获取步数明细,并计算总和 明细查问接口:https://health-api.cloud.huaw... 申请参数: { "polymerizeWith": [ { "dataTypeName": "com.huawei.continuous.steps.delta" } ], "endTime": 1651809600000, "startTime": 1651766400000}依据返回的后果计算的步数总和为6280 通过数据能够看出,在时间段雷同的前提下,采样数据统计接口返回的步数总和与依据步数明细计算的总和是不统一的。 起因剖析:是明细数据和统计数据不同的机制导致的。明细数据和统计数据是离开上报的,因为各种起因,明细数据可能会有失落或提早,导致两种数据不能齐全匹配。其次,在统计一天的数据时,聚合条件为以下参数时(见下图),返回的是上报的统计数据,而不是通过明细数据计算的数据。 解决方案:采样数据统计查问时,按工夫聚合,传入groupByTime参数,groupByTime中设置duration参数。 申请参数: { "polymerizeWith": [ { "dataTypeName": "com.huawei.continuous.steps.delta" } ], "endTime": 1651809600000, "startTime": 1651766400000, "groupByTime": { "duration": 86400000 }}最终返回的后果是6280,与依据步数明细计算的总和统一。 ...

June 10, 2022 · 1 min · jiezi

关于android:基于Android的时间与位置服务提醒系统的设计与实现

〇、对于本我的项目本文设计并实现了一款基于 Android 的工夫与位置服务揭示零碎——iRemind,它既能够通过用户设定的某个工夫进行工作的揭示,也容许用户设定进入或来到某个地点的工作揭示。 本我的项目为笔者的本科毕业设计《基于Android的工夫与位置服务揭示零碎的设计与实现》。本我的项目未齐全开发,欢迎您在此基础上进行改良,切勿剽窃! 本我的项目源码位于: 一、开发环境Android Studio 版本:4.1.1SDK版本:Android 11.0 (API 30)数据库:SQLite 二、应用办法(1)创立百度地图SDK我的项目参考注册和获取密钥,获取开发密钥,如: 1Kgrs3thlmmbfnRlCQGiOy57sGMduIFx在AndroidManifest.xml文件的相应地位填入你的密钥: <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="XXXXX你的密钥XXXXX" />(2)运行我的项目应用Android Studio关上本我的项目。倡议应用真机调试,参考:Android Studio如何进行真机调试运行该我的项目。三、零碎性能我的项目已实现的性能和未实现的性能如下: 待办事项治理 (1)增加待办事项:用户可点击主界面下方“增加工作”按钮增加待办事项。 (2)删除待办事项:用户可将待办事项右滑以删除待办事项。 (3)显示待办事项:在主界面可将所有待办事项显示,其中未实现工作排列于已实现工作之前。(应用适配器实现) (4)标记待办事项:用户可点击待办事项左侧复选框,将待办事项进行标记。揭示治理 (1)基于工夫的工作揭示:用户设定基于工夫的工作揭示,使其在设定工夫进行工作揭示。(应用Padding Intent实现) (2)基于地位的进入揭示:用户设定基于地位的进入揭示,使其在进入揭示范畴时进行工作揭示。(应用百度地图定位SDK实现) (3)基于地位的来到揭示:用户设定基于地位的来到揭示,使其在来到揭示范畴时进行工作揭示。(未实现)四、零碎欠缺与改良倡议对于“基于地位的进入揭示”性能,应用百度地图定位SDK地位揭示实现,调用BDNotifyListener的setNotifyLocation办法实现设置地位音讯揭示。 如果您要实现“基于地位的来到揭示”性能,可仔细阅读百度地图定位SDK相干源码,并在此基础上进行批改。或者您能够重写“基于地位的进入揭示”性能并改写“基于地位的来到揭示”性能。对于“删除待办事项”性能,可减少确认删除揭示,因为右滑删除存在误操作可能性。对于“基于地位的揭示”性能,抉择地点时可减少搜寻性能。可减少数据同步与复原性能。零碎的后盾运行存在问题,亟待解决。五、我的项目成果用户主界面模块 新建待办事项模块 位置服务模块 工夫揭示服务模块 地位揭示服务模块

June 9, 2022 · 1 min · jiezi