Получите уникальный идентификатор устройства в QML

Я должен получить уникальный идентификатор для устройства. Я первоначально думал, что буду использовать 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 / + ошибка/1197542, но с тех пор не была никакими обновлениями в течение года, я надеюсь, что, возможно, могу использовать некоторую другую информацию.

Так, кто-либо знает, как я могу получить уникальный идентификатор для устройства? Это должно быть персистентным, но это может быть полностью бессмысленно кроме как идентификатор.

2
задан 4 January 2015 в 14:54

3 ответа

Как dobey сказал, нет никакого способа получить IMEI в ограниченных приложениях, таким образом, я разочаровался в попытке получить идентификатор на основе самого устройства. Вместо этого я просто генерирую 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
    }
}
0
ответ дан 20 November 2019 в 02:08

Это действительно работает. Это - как параметры настройки системы человечности получение IMEI.

Скорее Ваша проблема может быть то, что console.log () не идет в любой консольный вывод, в котором Вы ожидаете видеть его, или система, Вы работаете на нем, не имеет IMEI в наличии (который требует модема GSM). Существует также порядковый номер, показанный в страница About параметров настройки системы, но это читается через плагин C++, который Вы, вероятно, не можете использовать непосредственно из Вашего приложения и, возможно, должны повторно реализовать.

Чтение информации об устройстве ограничено системой неограниченные приложения в данный момент. Нет никакого текущего policy_group для использования, чтобы быть в состоянии считать IMEI в ограниченном приложении.

1
ответ дан 20 November 2019 в 02:08

В более поздних версиях тип QML DeviceInfo имеет свойство uniqueID:

DeviceInfo {
    id: device
}

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

Документация: Элемент QML DeviceInfo: свойство uniqueID. (Код не тестировался, просто видел это в документации.)

0
ответ дан 23 June 2020 в 16:24

Другие вопросы по тегам:

Похожие вопросы: