uni-app 4.31 alpha 鸿蒙版必须设置定位权限 问题:在设置中禁止定位后 app界面整体空白

发布于 1周前 作者 zlyuanteng 来自 Uni-App

uni-app 4.31 alpha 鸿蒙版必须设置定位权限 问题:在设置中禁止定位后 app界面整体空白

示例代码:

{
  "requestPermissions": [
    {
      "name": "ohos.permission.APPROXIMATELY_LOCATION",
      "reason": "$string:location_tips",
      "usedScene": {
        "when": "inuse"
      }
    },
    {
      "name": "ohos.permission.LOCATION",
      "reason": "$string:location_tips",
      "usedScene": {
        "when": "inuse"
      }
    }
  ]
}
uni.getLocation({
  type: 'wgs84',
  geocode: true,
  isHighAccuracy: true,
  success: function(res) {
    _this.longitude = res.longitude
    _this.latitude = res.latitude
    console.log('location===', JSON.stringify(res));
  }
})

操作步骤:

  • 页面上允许定位权限后,打开设置,禁止定位权限,返回app,app空白

预期结果:

  • 正常

实际结果:

  • 页面空白

bug描述:

  • 页面上允许定位权限后,打开设置,禁止定位权限,返回app,app空白

| 信息类型         | 信息内容               |
|------------------|------------------------|
| 产品分类         | uniapp/App             |
| PC开发环境       | Windows                |
| PC开发环境版本   | win11                  |
| HBuilderX类型    | Alpha                  |
| HBuilderX版本    | 4.31                   |
| 手机系统         | HarmonyOS NEXT         |
| 手机系统版本     | HarmonyOS NEXT Developer Beta2 |
| 手机厂商         | 华为                   |
| 手机机型         | mate60                 |
| 页面类型         | vue                    |
| vue版本          | vue3                   |
| 打包方式         | 云端                   |
| 项目创建方式     | HBuilderX              |

更多关于uni-app 4.31 alpha 鸿蒙版必须设置定位权限 问题:在设置中禁止定位后 app界面整体空白的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

你好,我这里经过测试,没有复现相关的问题,你尝试更新到最新 deveco 试试。

更多关于uni-app 4.31 alpha 鸿蒙版必须设置定位权限 问题:在设置中禁止定位后 app界面整体空白的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


uni-im里发了你一个视频,麻烦帮忙看下

不止定位权限,录音权限也一样,可能权限都有这个问题

用户代码编译产物过大导致应用崩溃的 导致的问题

在uni-app 4.31 alpha 鸿蒙版中,如果应用定位权限被禁止而导致界面整体空白,这通常是因为应用依赖于定位功能,并且没有适当地处理权限被拒绝的情况。为了解决这个问题,你可以采取以下步骤:

  1. 检查定位权限:在应用启动时检查定位权限是否被授权。
  2. 处理权限拒绝:如果权限被拒绝,显示一个提示信息,并引导用户去设置中开启权限,而不是让界面整体空白。

下面是一个简单的代码示例,展示如何在uni-app中实现这些功能:

// 在 main.js 或 app.js 中初始化应用时检查定位权限
import * as plus from 'plus';

function checkLocationPermission() {
    return new Promise((resolve, reject) => {
        plus.android.importClass('android.Manifest');
        plus.android.importClass('android.content.pm.PackageManager');
        const context = plus.android.runtimeMainActivity();
        const pm = context.getPackageManager();
        const permission = plus.android.getAttribute(plus.android.Manifest.permission.ACCESS_FINE_LOCATION, 'name');

        if (pm.checkPermission(permission, context.getPackageName()) === plus.android.PackageManager.PERMISSION_GRANTED) {
            resolve(true); // 权限已授权
        } else {
            resolve(false); // 权限未授权
        }
    });
}

async function initApp() {
    try {
        const hasPermission = await checkLocationPermission();
        if (!hasPermission) {
            // 权限被拒绝,显示提示信息
            uni.showModal({
                title: '提示',
                content: '应用需要您的定位权限,请前往设置中开启',
                success: function (res) {
                    if (res.confirm) {
                        // 跳转到系统设置页面(鸿蒙系统可能需要特殊处理,这里以Android为例)
                        plus.runtime.openURL('_blank', 'package:settings');
                    }
                }
            });
            // 你可以在这里处理界面显示问题,比如显示一个备用页面
            // uni.redirectTo({ url: '/pages/noPermission/noPermission' });
        } else {
            // 权限已授权,正常初始化应用
            // ...
        }
    } catch (error) {
        console.error('检查定位权限时出错:', error);
    }
}

// 在应用启动时调用 initApp 函数
initApp();

请注意,上述代码中的 plus.runtime.openURL('_blank', 'package:settings'); 是针对Android系统的,鸿蒙系统可能需要使用不同的URL或API来打开系统设置页面。你可能需要查阅鸿蒙系统的开发文档来找到正确的URL或API。

此外,确保在 manifest.json 文件中正确声明了定位权限。如果权限声明不正确,应用可能无法请求到定位权限。

回到顶部