J'ai besoin d'obtenir un identifiant unique pour l'appareil. Au départ, je pensais utiliser l'imei de l'appareil, mais cela ne semble rien retourner:
import QtSystemInfo 5.0
DeviceInfo {
id: device
}
Component.onCompleted {
console.log(device.imei(0)) // Returns nothing
}
Cela peut ou non être un bug: https://bugs.launchpad.net/ubuntu/+source/qtsystems-opensource-src/+bug/1197542 mais puisqu'il n'y a eu aucune mise à jour depuis un an, j'espère que je pourrai peut-être utiliser d'autres informations.
Alors, quelqu'un sait-il comment obtenir un identifiant unique pour l'appareil? Il doit être persistant, mais il peut être totalement dénué de sens autrement qu'en tant qu'identifiant.
Comme l'a dit dobey, il n'y a aucun moyen d'obtenir l'IMEI dans les applications confinées, j'ai donc renoncé à essayer d'obtenir un ID basé sur l'appareil lui-même. Au lieu de cela, je génère simplement un UUID et le stocke dans 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
}
}
Cela fonctionne. C'est ainsi que ubuntu-system-settings est obtention de l'IMEI .
Au contraire, votre problème peut être que console.log () ne va pas à la sortie de la console sur laquelle vous vous attendez à le voir, ou le système sur lequel vous l'exécutez, n'a pas d'IMEI disponible (qui nécessite un modem GSM). Il existe également un numéro de série indiqué dans la page À propos des paramètres système, mais il est lu via un plug-in C++, que vous ne pouvez probablement pas utiliser directement à partir de votre application et peut nécessiter une réimplémentation.
La lecture des informations sur l'appareil est actuellement limitée aux applications système non confinées. Il n'y a aucun groupe de règles actuel à utiliser pour pouvoir lire l'IMEI dans une application confinée.