当前位置:   article > 正文

鸿蒙原生应用元服务开发-Web管理位置权限

鸿蒙原生应用元服务开发-Web管理位置权限

Web组件提供位置权限管理能力。开发者可以通过onGeolocationShow()接口对某个网站进行位置权限管理。Web组件根据接口响应结果,决定是否赋予前端页面权限。获取设备位置,需要开发者配置ohos.permission.LOCATION权限。

在下面的示例中,用户点击前端页面"获取位置"按钮,Web组件通过弹窗的形式通知应用侧位置权限请求消息,示例代码如下:

前端页面代码。

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <p id="locationInfo">位置信息</p>
  5. <button onclick="getLocation()">获取位置</button>
  6. <script>
  7. var locationInfo=document.getElementById("locationInfo");
  8. function getLocation(){
  9. if (navigator.geolocation) {
  10. <!-- 前端页面访问设备地理位置 -->
  11. navigator.geolocation.getCurrentPosition(showPosition);
  12. }
  13. }
  14. function showPosition(position){
  15. locationInfo.innerHTML="Latitude: " + position.coords.latitude + "<br />Longitude: " + position.coords.longitude;
  16. }
  17. </script>
  18. </body>
  19. </html>
  20. 应用代码。
  21. // xxx.ets
  22. import web_webview from '@ohos.web.webview';
  23. import common from '@ohos.app.ability.common';
  24. import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
  25. import geoLocationManager from '@ohos.geoLocationManager';
  26. let context = getContext(this) as common.UIAbilityContext;
  27. let atManager = abilityAccessCtrl.createAtManager();
  28. try{
  29. atManager.requestPermissionsFromUser(context, ["ohos.permission.APPROXIMATELY_LOCATION"], (err, data) => {
  30. let requestInfo: geoLocationManager.LocationRequest = {
  31. 'priority': 0x203,
  32. 'scenario': 0x300,
  33. 'maxAccuracy': 0
  34. };
  35. let locationChange = (location: geoLocationManager.Location):void => {
  36. if(location){
  37. console.log('locationChanger: location=' + JSON.stringify(location));
  38. }
  39. };
  40. try{
  41. geoLocationManager.on('locationChange', requestInfo, locationChange);
  42. geoLocationManager.off('locationChange', locationChange);
  43. } catch (err) {
  44. console.error("errCode:" + err.code + ", errMessage:" + err.message);
  45. }
  46. })
  47. } catch (err) {
  48. console.error("err:", err);
  49. }
  50. @Entry
  51. @Component
  52. struct WebComponent {
  53. controller: web_webview.WebviewController = new web_webview.WebviewController();
  54. build() {
  55. Column() {
  56. Web({ src:$rawfile('getLocation.html'), controller:this.controller })
  57. .geolocationAccess(true)
  58. .onGeolocationShow((event) => { // 地理位置权限申请通知
  59. AlertDialog.show({
  60. title: '位置权限请求',
  61. message: '是否允许获取位置信息',
  62. primaryButton: {
  63. value: 'cancel',
  64. action: () => {
  65. if(event){
  66. event.geolocation.invoke(event.origin, false, false); // 不允许此站点地理位置权限请求
  67. }
  68. }
  69. },
  70. secondaryButton: {
  71. value: 'ok',
  72. action: () => {
  73. if(event){
  74. event.geolocation.invoke(event.origin, true, false); // 允许此站点地理位置权限请求
  75. }
  76. }
  77. },
  78. cancel: () => {
  79. if(event){
  80. event.geolocation.invoke(event.origin, false, false); // 不允许此站点地理位置权限请求
  81. }
  82. }
  83. })
  84. })
  85. }
  86. }
  87. }

本文参考引用HarmonyOS官方开发文档,基于API9。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/525390
推荐阅读
相关标签
  

闽ICP备14008679号