在Android上的PhoneGap中未定义device.uuid?

时间:2010-05-20 21:19:44

标签: android cordova

我正在编写一个将请求发送到中央数据库的PhoneGap应用程序。它需要能够识别连接到它的唯一设备。

PhoneGap的device.uuid property似乎可以解决问题。在webOS和iPhone上,我找回了一串独特的字母数字字符,这将满足我的需要。但是,我测试的Android设备(摩托罗拉Droid和Android SDK模拟器都运行Android 2.1)返回“未定义”为device.uuid

device.platformdevice.name在所有三个平台上都返回正确的值,因此问题与device对象本身无关(它在我使用的代码块中定义)它)。

这是Android限制吗? PhoneGap有问题吗?

如果不是通过device.uuid,还有其他方法可以获得这样一个全球唯一标识符吗?

编辑:似乎deviceready事件永远不会被触发,这需要在device.uuid属性可用之前发生。

4 个答案:

答案 0 :(得分:3)

根据Phonegap版本和/或设备的不同,您可能需要明确安装插件。在我们的项目中,设备存在但device.uuid未定义。运行cordova plugin add org.apache.cordova.device修复了我们的问题。

答案 1 :(得分:1)

我还没有找到解决方案,但值得注意的是Android 2.2中已修复此问题。但除此之外,如果设备运行2.1或更早版本,您将不得不找到一些获取唯一设备标识符的方法。

答案 2 :(得分:0)

我遇到了同样的问题。它以前工作,我最终将问题追溯到清单权限。

如果未启用android.permission.ACCESS_NETWORK_STATE,则deviceready将无法启动,device.uuid将无效。

答案 3 :(得分:0)

这对我有用:

首次安装设备插件:

cordova plugin add cordova-plugin-device

在我的index.js中我有这个:

var app = {
    initialize: function() {
        $.support.cors = true;
        this.bindEvents();
    },
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    onDeviceReady: function() {
        app.receivedEvent('deviceready');
    },
    receivedEvent: function(id) {
        console.log('Received Event: ' + id);
    },   
    getDeviceInfo: function() {
        var aio = new Object();
        aio.agent = device.platform + "," + device.version + "," + device.model;
        aio.deviceid = device.uuid;
        return aio;
    }
};
app.initialize();

module.controller('AppController',function($scope) {
    console.log('GOOOO');
    ons.ready(function() {
        console.log("ons ready");

        var appInfoObj = app.getDeviceInfo();
        console.log("Agent: " + appInfoObj.agent);
        console.log("UUID: " + appInfoObj.deviceid);
    });
});