我需要获取设备的唯一 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
在较新的版本中,DeviceInfo
QML 类型具有一个uniqueID
属性:
DeviceInfo {
id: device
}
Component.onCompleted {
console.log(device.uniqueID)
}
文档:QML DeviceInfo 元素:属性 uniqueID.(代码未经测试,只是在文档中看到。)