uni-app uni.getSystemInfoSync() 报Bug

uni-app uni.getSystemInfoSync() 报Bug

开发环境 版本号 项目创建方式
Mac 10.15 HBuilderX
### 操作步骤:

uni.getSystemInfo({
success(e) {
console.log(e);
}
})

预期结果:

返回"deviceId": “xxxx”


### 实际结果:

"deviceId": ""

bug描述:

uni.getSystemInfoSync()

二次启动无法获取 “deviceId”: “”

下面是二次启动数据

{
"errMsg": "getSystemInfo:ok",
"brand": "HUAWEI",
"model": "TEL-AN00a",
"pixelRatio": 3,
"screenWidth": 360,
"screenHeight": 800,
"windowWidth": 360,
"windowHeight": 800,
"statusBarHeight": 24,
"language": "zh-CN",
"system": "Android 10",
"version": "1.9.9.81128",
"fontSizeSetting": "",
"platform": "android",
"SDKVersion": "",
"windowTop": 0,
"windowBottom": 0,
"safeArea": {
"left": 0,
"right": 360,
"top": 24,
"bottom": 800,
"width": 360,
"height": 776
},
"safeAreaInsets": {
"top": 24,
"right": 0,
"bottom": 0,
"left": 0
},
"deviceId": ""
}

更多关于uni-app uni.getSystemInfoSync() 报Bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app uni.getSystemInfoSync() 报Bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个已知的Android平台上的权限问题。deviceId 在首次启动时可能正常获取,但二次启动时返回空字符串,通常是因为应用缺少必要的权限。

核心原因: 在Android系统上,deviceId 的获取依赖于 READ_PHONE_STATE 权限。如果应用没有动态申请该权限,或用户拒绝了该权限,系统将无法提供设备标识信息。

解决方案

  1. 检查并配置权限: 在项目的 manifest.json 文件中,确保已声明所需权限:

    {
      "app-plus": {
        "distribute": {
          "android": {
            "permissions": [
              "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>"
            ]
          }
        }
      }
    }
    
  2. 动态权限申请: 在应用启动时或需要获取 deviceId 前,使用 uni.authorize 动态申请权限:

    uni.authorize({
      scope: 'scope.record',
      success() {
        // 授权成功,可调用 uni.getSystemInfo
        uni.getSystemInfo({
          success(e) {
            console.log(e.deviceId);
          }
        });
      },
      fail() {
        // 处理授权失败
      }
    });
回到顶部