在 QML 中获取唯一的设备 ID

在 QML 中获取唯一的设备 ID

我需要获取设备的唯一 ID。我原本想使用设备的 imei,但似乎没有返回任何内容:

import QtSystemInfo 5.0

DeviceInfo {
    id: device
}

Component.onCompleted {
    console.log(device.imei(0)) // Returns nothing
}

这可能是也可能不是一个错误:https://bugs.launchpad.net/ubuntu/+source/qtsystems-opensource-src/+bug/1197542但由于一年来都没有任何更新,我希望也许我可以使用一些其他信息。

那么,有人知道如何获取设备的唯一 ID 吗?它必须是持久的,但除了作为标识符之外,它可能完全没有意义。

答案1

正如 dobey 所说,在受限应用中无法获取 IMEI,所以我放弃了尝试根据设备本身获取 ID。相反,我只是生成一个 UUID 并将其存储在 U1DB 中。

// uuid.js
.pragma library

function generateUUID(){
    var d = new Date().getTime();
    var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
        var r = (d + Math.random()*16)%16 | 0;
        d = Math.floor(d/16);
        return (c === 'x' ? r : (r&0x3|0x8)).toString(16);
    });
    return uuid;
};

// Elsewhere
U1db.Database {
    id: db
    path: "settings"
}

U1db.Document {
    id: user
    database: db
    docId: "user"
    create: true
    defaults: {
        "userId": ""
    }
}

// Somewhere I need the userId
Item {
    id: thing

    Component.onCompleted: {
        userId: user.contents.userId
        if (!userId) {
             userId = Uuid.generateUUID()
             var userContents = user.contents
             userContents.userId = userId
             user.contents = userContents
        }
        return userId
    }
}

答案2

这确实有效。这就是ubuntu 系统设置获取 IMEI

相反,您的问题可能是 console.log() 不会输出您期望看到的任何控制台输出,或者您运行它的系统没有可用的 IMEI(这需要 GSM 调制解调器)。关于系统设置页面,但它是通过 C++ 插件读取的,您可能无法直接从应用程序中使用该插件,可能需要重新实现。

目前,读取设备信息仅限于不受系统限制的应用。目前没有可用于读取受限制应用中的 IMEI 的策略组。

答案3

在较新的版本中,DeviceInfoQML 类型具有一个uniqueID属性:

DeviceInfo {
    id: device
}

Component.onCompleted {
    console.log(device.uniqueID)
}

文档:QML DeviceInfo 元素:属性 uniqueID.(代码未经测试,只是在文档中看到。)

相关内容