不再询问WiFi密码。HMSCore统一扫描服务,让手机一键上网。虽然公共场所的免费WiFi越来越多,但连接网络的过程却很麻烦。有的需要打开网页注册或点击广告链接上网,有的需要下载特定的APP才能连接。那么有没有更方便的联网方式呢?“扫码联网”提出了一种解决方案,商家可以在店内放置一个包含WiFi信息的二维码。用户可以通过打开手机摄像头扫码连接WiFi。还支持将二维码分享给身边的朋友,让网络访问更加快捷直观,再也不用担心隐私泄露和无用信息被推送。效果展示了实现原理。通过HMSCore统一扫码服务的代码生成和扫描能力,轻松实现扫码连接WiFi的场景。开发实践1.构建扫码功能开发准备1.1配置华为Maven仓库地址在项目的“buildscript>repositories”中配置HMSCoreSDK的Maven仓库地址。在“allprojects>repositories”配置HMSCoreSDK的Maven仓库地址。buildscript{repositories{google()jcenter()//配置HMSCoreSDK的Maven仓库地址。maven{url'https://developer.huawei.com/repo/'}}}allprojects{repositories{google()jcenter()//配置HMSCoreSDK的Maven仓库地址。Maven{url'https://developer.huawei.com/repo/'}}}Gradle7.0后,“allprojects>repositories”配置迁移到项目级“settings.gradle”文件。“settings.gradle”文件配置示例如下:dependencyResolutionManagement{...repositories{google()jcenter()maven{url'https://developer.huawei.com/repo/'}}}1.2添加编译依赖位置applicationbuild.gradledependencies{//扫描SDK实现'com.huawei.hms:scan:2.3.0.300'}1.3代码混淆打开应用级根目录下的混淆配置文件“proguard-rules.pro”,并添加排除HMSCoreSDK配置脚本的混淆。-ignorewarnings-keepattributes*Annotation*-keepattributesExceptions-keepattributesInnerClasses-keepattributesSignature-keepattributesSourceFile,LineNumberTable-keepclasscom.huawei.hianalytics.**{*;}-keepclasscom.huawei.updatesdk.**{*;}-keepclasscom.huawei.hms.**{*;}1.4Manifest.xml添加权限1.5申请动态权限ActivityCompat.requestPermissions(this,newString[]{Manifest.permission.CAMERA,Manifest.permission.READ_EXTERNAL_STORAGE},requestCode);1.6申请权限结果@OverridepublicvoidonRequestPermissionsResult(intrequestCode,String[]permissions,int[]grantResults){super.onRequestPermissionsResult(requestCode,permissions,grantResults);如果(权限==null||grantResults==null){return;}//申请权限成功或已经有权限if(requestCode==CAMERA_REQ_CODE){//默认ViewMode扫码接口//参数说明://activityrequestactivityforscanningcode//requestCoderequestcodeforscanningcoderequest标识是否activity返回时从扫码界面返回//option扫码格式选项可以设置为“null”}}1.7回调接口接收扫码结果、摄像头扫码、导入图片扫码均通过该接口返回。@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){super.onActivityResult(requestCode,resultCode,data);if(resultCode!=RESULT_OK||data==null){返回;}if(requestCode==REQUEST_CODE_SCAN_ONE){//导入图像扫描结果HmsScanhmsScan=data.getParcelableExtra(ScanUtil.RESULT);if(hmsScan!=null){//代码值结果rawResultcustomTextViewrawResult.setText(hmsScan.getOriginalValue());二、构建代码生成功能构建扫码功能还需要配置Marven仓库地址,添加编译依赖和配置混淆脚本,参考上面1.1、1.2和1.32.1Manifest.xml添加权限2.2申请动态权限ActivityCompat.requestPermissions(this,newString[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},requestCode);2.3申请权限结果@OverridepublicvoidonRequestPermissionsResult(intrequestsCode,String[]permission,int[]grantResults){如果(权限==null||grantResults==null){返回;}if(grantResults[0]==PackageManager.PERMISSION_GRANTED&&requestCode==GENERATE_CODE){Intentintent=newIntent(this,GenerateCodeActivity.class);这个.startActivity(意图);}}2.4生成二维码publicvoidgenerateCodeBtnClick(Viewv){resultImage=ScanUtil.buildBitmap(内容、类型、宽度、高度、选项);barcodeImage.setImageBitmap(resultImage);}catch(WriterExceptione){Toast.makeText(this,"参数错误!",Toast.LENGTH_SHORT).show();}}2.5保存二维码publicvoidsaveCodeBtnClick(Viewv){if(resultImage==null){Toast.makeText(GenerateCodeActivity.this,"请先生成条码!",Toast.LENGTH_LONG).show();返回;}try{StringfileName=System.currentTimeMillis()+".jpg";StringstorePath=Environment.getExternalStorageDirectory().getAbsolutePath();文件appDir=新文件(storePath);如果(!appDir.exists()){appDir.mkdir();}文件file=newFile(appDir,fileName);FileOutputStreamfileOutputStream=newFileOutputStream(文件);booleanisSuccess=resultImage.compress(Bitmap.CompressFormat.JPEG,70,fileOutputStream);fileOutputStream.flush();文件输出流.close();uriuri=Uri.fromFile(文件);GenerateCodeActivity.this.sendBroadcast(新意图(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,uri));我f(isSuccess){Toast.makeText(GenerateCodeActivity.this,"条码已保存到本地",Toast.LENGTH_LONG).show();}else{Toast.makeText(GenerateCodeActivity.this,"条码保存失败",Toast.LENGTH_SHORT).show();}}catch(Exceptione){Toast.makeText(GenerateCodeActivity.this,"未知错误",Toast.LENGTH_SHORT).show();}}更多HMSCore统一扫码服务详情,请参考:https://developer.huawei.com/...华为开发者联盟官网获取开发指导文档参与开发者讨论,请前往Reddit社区下载demo和示例代码,请到Github解决集成问题,请到StackOverflow