HMS Core定位服务在生活服务类App中可以自动填写收货地址啦
在涉及团购、外卖、快递、家政、物流、搬家等生活服务类的App、小程序中,填写收货地址是用户高频使用的功能。这一功能通常采取让用户手动填写的解决方案,例如上下拉动选择浙江省–>杭州市–>西湖区–>西溪街道,再切换到姓名输入框输入姓名–>电话输入框输入电话等一系列的操作。从中我们不难发现手动输入地址不仅费时费力,而且一不小心还会出现选错地址的现象。
那有没有什么方法能帮助用户又快又准确的填写地址呢?借助HMS Core 定位服务的融合定位+地理编码能力,生活服务类App可以自动定位获取用户当前位置信息或某地的行政区划信息、街道信息,并准确填写至地址栏中。用户无需自己手动输入,减少了操作时间,并且不用再担心填错地址。以下是我们提供的示例代码,开发者们按照步骤尝试,就可以轻松体验这个功能啦~
效果展示
开发实战
开发步骤
一、 开发准备
1. 登录AppGallery Connect网站,点击“我的项目”。找到您的项目在API管理开启location开关,在项目中点击需要配置签名证书指纹的应用。在“项目设置 > 常规”页面的“应用”区域,点击“SHA256证书指纹”后的“添加证书指纹”,输入生成的SHA256指纹。
2. 在“项目设置 > 常规”页面的“应用”区域,点击“agconnect-services.json”下载配置文件。将“agconnect-services.json”文件拷贝到应用级根目录下。
3. 项目级“build.gradle”文件
buildscript {repositories {google()jcenter()maven { url 'https://developer.huawei.com/repo/' }mavenCentral()}dependencies {classpath 'com.android.tools.build:gradle:4.1.2'classpath 'com.huawei.agconnect:agcp:1.6.0.300'}
}allprojects {repositories {maven { url 'https://developer.huawei.com/repo/' }google()jcenter()mavenCentral()}
}
应用级的“build.gradle”文件
plugins {id 'com.android.application'id 'com.huawei.agconnect'
}
在“dependencies ”中添加如下编译依赖
implementation 'com.huawei.hms:location:6.3.0.300'
二、 权限检查
1. 在“AndroidManifest.xml”文件中配置权限ACCESS_COARSE_LOCATION(粗略的位置权限),ACCESS_FINE_LOCATION(精确的位置权限)和ACCESS_BACKGROUND_LOCATION权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
2. 动态申请定位相关权限(Android 6.0及以上版本危险权限要求)
Log.i(TAG, "android sdk < 28 Q");if (ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {String[] strings ={Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};ActivityCompat.requestPermissions(this, strings, 1);}
} else {if (ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(this,"android.permission.ACCESS_BACKGROUND_LOCATION") != PackageManager.PERMISSION_GRANTED) {String[] strings = {Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION,"android.permission.ACCESS_BACKGROUND_LOCATION"};ActivityCompat.requestPermissions(this, strings, 2);}
}
三、 获取定位结果
1. 设置定位参数,包括位置更新的间隔,定位类型等
mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
mSettingsClient = LocationServices.getSettingsClient(this);
mLocationRequest = new LocationRequest();
// Sets the interval for location update (unit: Millisecond)
mLocationRequest.setInterval(5000);
// Sets the priority
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
2. 调用getSettingsClient()接口获取SettingsClient实例。调用调用checkLocationSettings()检查设备开关设置
LocationSettingsRequest locationSettingsRequest = builder.build();
// Before requesting location update, invoke checkLocationSettings to check device settings.
Task<LocationSettingsResponse> locationSettingsResponseTask =mSettingsClient.checkLocationSettings(locationSettingsRequest);
检查开关开启之后 ,调用requestLocationUpdates()进行定位
locationSettingsResponseTask.addOnSuccessListener(new OnSuccessListener<LocationSettingsResponse>() {@Overridepublic void onSuccess(LocationSettingsResponse locationSettingsResponse) {Log.i(TAG, "check location settings success");mFusedLocationProviderClient.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.getMainLooper()).addOnSuccessListener(new OnSuccessListener<Void>() {@Overridepublic void onSuccess(Void aVoid) {Log.i(TAG, "requestLocationUpdatesWithCallback onSuccess");}}).addOnFailureListener(new OnFailureListener() {@Overridepublic void onFailure(Exception e) {Log.e(TAG, "requestLocationUpdatesWithCallback onFailure:" + e.getMessage());}});}
}).addOnFailureListener(new OnFailureListener() {@Overridepublic void onFailure(Exception e) {Log.e(TAG, "checkLocationSetting onFailure:" + e.getMessage());int statusCode = 0;if (e instanceof ApiException) {statusCode = ((ApiException) e).getStatusCode();}switch (statusCode) {case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:try {// When the startResolutionForResult is invoked, a dialog box is displayed, asking you// to open the corresponding permission.if (e instanceof ResolvableApiException) {ResolvableApiException rae = (ResolvableApiException) e;rae.startResolutionForResult(MainActivity.this, 0);}} catch (IntentSender.SendIntentException sie) {Log.e(TAG, "PendingIntent unable to execute request.");}break;default:break;}}
});
四、 逆地理编码获取当前位置
成功获取定位信息的经纬度之后,将经纬度信息传递给使用地理编码服务(GeocoderService)获得地理编码请求对象,然后调用请求逆地理编码方法(getFromLocation),设置请求(GetFromLocationRequest)参数,获取逆地理编码信息回调。
if (null == mLocationCallback) {mLocationCallback = new LocationCallback() {@Overridepublic void onLocationResult(LocationResult locationResult) {if (locationResult != null) {List<Location> locations = locationResult.getLocations();if (!locations.isEmpty()) {ExecutorUtil.getInstance().execute(new Runnable() {@Overridepublic void run() {Locale locale = new Locale("zh", "CN");GeocoderService geocoderService = LocationServices.getGeocoderService(MainActivity.this, locale);GetFromLocationRequest getFromLocationRequest = new GetFromLocationRequest(locations.get(0).getLatitude(), locations.get(0).getLongitude(), 1);geocoderService.getFromLocation(getFromLocationRequest).addOnSuccessListener(new OnSuccessListener<List<HWLocation>>() {@Overridepublic void onSuccess(List<HWLocation> hwLocation) {printGeocoderResult(hwLocation);}}).addOnFailureListener(new OnFailureListener() {@Overridepublic void onFailure(Exception e) {Log.i(TAG, e.getMessage());}});}});}}}@Overridepublic void onLocationAvailability(LocationAvailability locationAvailability) {if (locationAvailability != null) {boolean flag = locationAvailability.isLocationAvailable();Log.i(TAG, "onLocationAvailability isLocationAvailable:" + flag);}}};
}
最后将获取到的结果显示在界面上即可。
了解更多详情>>
访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHub、Gitee
关注我们,第一时间了解 HMS Core 最新技术资讯~
HMS Core定位服务在生活服务类App中可以自动填写收货地址啦相关推荐
- 澎湃新闻产品总监首度分享,如何快速在新闻类APP中异军突围?一年时间进入前4名...
2014年7月22日,由上海报业集团打造的澎湃新闻客户端正式上线.作为首批试水新媒体的国家队纸媒,自诞生之日起,澎湃新闻一直在媒体的聚光灯下,无论是产品设计.UI还是运营模式,都收到广泛关注,褒贬不一 ...
- 关于直播类app中的推流、拉流技术(转载)
关于直播类app中的推流.拉流技术 from:https://blog.csdn.net/lzllzllhl/article/details/80249069 图像处理:iOS端一般会用到GPUIma ...
- 关于直播类app中的推流、拉流技术
虽然直播app在2016年的时候就很火了,但是对于我这样的技术菜逼来说,从来没有真正的去了解过,而对于这方面的技术,我就更是不了解了.由于最近的项目中可能会用到直播之类的功能,所以就赶紧来恶补一下这方 ...
- 【HMS Core】统一扫码服务中的RemoteView如何修改视图比例?
1.问题描述 项目中有一个需求:将扫码视图设置为正方形. 详情如下图所示: 目前默认的视图是按屏幕比例展示的,将视图设置为正方形时,视图的Y轴将会被压缩,现在的问题是: 该View是否支持自定义比例展 ...
- 腾讯地图类快递自动填写收发货地址功能
开发场景 获取当前位置信息或者某地的行政区划信息或者街道信息,实现类似电商平台填写收货地址功能. 技术选型 微信小程序JavaScript SDK 微信小程序插件 确定业务逻辑及页面设计 以简洁大气为 ...
- 微信小程序类快递自动填写收发货地址功能
开发场景 获取当前位置信息或者某地的行政区划信息或者街道信息,实现类似电商平台填写收货地址功能. 技术选型 微信小程序JavaScript SDK 微信小程序插件 确定业务逻辑及页面设计 以简洁大气为 ...
- 深耕图形服务,HMS Core 5.0携手开发者共创视觉盛宴
在今年HDC大会分论坛上,华为向业界和广大开发者展示了HMS Core 5.0在图形服务(Graphics)的最新成果,图形服务(Graphics)是2020年6月上线的HMS Core 5.0七大领 ...
- 【HMS Core】华为登录后返回错误码 8 、账号服务如何授权、推送服务端获取用户信息异常
1.[HMS core][游戏登陆][问题描述] 调用华为登录后返回错误码 8 [解决方案] 错误码8的话一般在定义为内部错误(引起该错误码的原因很多),但是一般重试基本可以解决该问题(错误码).如果 ...
- 携手HMS Core统一扫码服务, 兴业证券优理宝App提升用户扫码体验
兴业证券优理宝App联合华为HMS Core,集成HMS Core统一扫码服务,在提升扫码成功率的同时,还支持C端用户用手机端APP扫描手表端二维码,实现行情在手机与手表间跨终端流转,行情信息,抬腕可 ...
最新文章
- Access denied for user 'root'@'localhost' 解决流程
- A Complete List of .NET Open Source Developer Projects
- 【控制】《复杂运动体系统的分布式协同控制与优化》-方浩老师-第6章-操作度优化条件下的移动机械臂协同搬运控制
- 下拉插件dropload js时间计算(几天前)
- sonar 中质量指标(度量)
- java基本数据类型以及相关内容总结
- VNC服务的使用和使用qemu-img工具创建更多格式的磁盘映像文件
- 计算机仿真图中的数码管元件库中叫,Multisim仿真软件在电子电路设计中的应用...
- 五面阿里拿下飞猪事业部offer,统统给你解决!
- 在ANSYS WORKBENCH中使用APDL命令的例子
- html狙击瞄准特效,如何给视频加特效:制作电影中狙击场景效果 望远镜效果视频...
- 电子商务系统建设(十一)
- 原来路由器也属于消耗品
- ftp上传老是失败 [L] TYPE A [L] 200 Type set to A. [L] MODE Z [L] 200 MODE Z ok. [L] PASV [L] 550 Pa
- January 04th, 2018 Week 01st Thursday
- 【stm32】delay详解
- 福州计算机软件培训学校,福州计算机办公软件应用培训
- 100G波分复用(WDM)宽带传输设备
- 在 R 中估计 GARCH 参数存在的问题
- 决策树模型之泰坦尼克号乘客是否生还预测