将 Android 4.1与Cordova 2.0.0和Sketcha(UI库)一起使用.
更新#2 20/9/12:我使用了Bozzzi的代码并修复了一些问题:
>添加了})到localnotification.js的末尾(语法错误).
>将cordova.define(“cordova / plugin / LocalNotification”,函数(require,exports,module))更改为:
cordova.define(“cordova / plugin / LocalNotification”,函数(require,exports,module),
所以模块名称将匹配此功能(在找不到模块之前):
window.plugins.LocalNotification =
cordova.require(“cordova/plugin/LocalNotification”);
>改变这个:
if (!window.plugins) {
window.plugins = {};
}
else if (!window.plugins.LocalNotification) {
window.plugins.LocalNotification = cordova.require(“cordova/plugin/LocalNotification”);
}
对此:
if (!window.plugins) { window.plugins = {}; } if (!window.plugins.LocalNotification) { window.plugins.LocalNotification = cordova.require("cordova/plugin/LocalNotification"); }
在此更改之前,如果找不到window.plugins,则会创建它,但window.plugins.LocalNotification不会.
完成所有这些修复后,我收到此错误:
06001
由于某种原因,cordova.require(“cordova / plugin / LocalNotification”)不设置window.plugins.LocalNotification值并且它一直未定义.
这是我更新的index.html(更新#2):
<!DOCTYPE HTML> <html manifest="" lang="en-US"> <head> <meta charset="UTF-8"> <title>AndroidSencha</title> <script id="microloader" type="text/javascript" src="cordova-2.0.0.js"></script> <script id="microloader" type="text/javascript" src="LocalNotification.js"></script> <script id="microloader" type="text/javascript"> function onDeviceReady() { if (!window.plugins) { window.plugins = {}; } else if (!window.plugins.LocalNotification) { window.plugins.LocalNotification = cordova.require("cordova/plugin/LocalNotification"); } } window.document.addEventListener("deviceready", appReady, false); function appReady() { console.log("PAPA AMERICANO ready"); var d = new Date(); d = d.getTime() + 2 * 1000; //60 seconds from now d = new Date(d); if (!window.plugins) { window.plugins = {}; } if (!window.plugins.LocalNotification) { window.plugins.LocalNotification = cordova.require("cordova/plugin/LocalNotification"); } window.plugins.localNotification.add({ date: d, message: 'This is an Android alarm using the statusbar', id: 123 }); } </script> <style type="text/css"> /** * Example of an initial loading indicator. * It is recommended to keep this as minimal as possible to provide instant feedback * while other resources are still being loaded for the first time */ html, body { height: 100%; background-color: #1985D0 } </style> <!-- The line below must be kept intact for Sencha Command to build your application --> <script id="microloader" type="text/javascript" src="sdk/microloader/development.js"></script> <style type="text/css"> .loadingText{ color: white; font-family: "Avant Garde", Avantgarde, "Century Gothic", CenturyGothic, "AppleGothic", sans-serif; text-align: center; font-size: 20px; padding-top: 10%; } </style> </head> <body> <div id="appLoadingIndicator"> <div class="loadingText"><div style="margin-bottom: 10px;">Loading, Please wait..</div> <div><img src="resources\images\smileloading.gif"></div></div> </div> </body> </html>
这是我修复后的localnotificaiton.js(更新#2):
cordova.define("cordova/plugin/LocalNotification", function(require, exports, module) { var exec = require("cordova/exec"); var LocalNotification = function () {}; LocalNotification.prototype.add = function(options) { var defaults = { date : new Date(), message : '', ticker : '', repeatDaily : false, id : "" }; if (options.date) { options.date = (options.date.getMonth()) + "/" + (options.date.getDate()) + "/" + (options.date.getFullYear()) + "/" + (options.date.getHours()) + "/" + (options.date.getMinutes()); } for ( var key in defaults) { if (typeof options[key] !== "undefined") defaults[key] = options[key]; } cordova.exec(null, null, "LocalNotification", "add", new Array(defaults)); }; LocalNotification.prototype.cancel = function(notificationId) { cordova.exec(null, null, 'LocalNotification', 'cancel', new Array({ id : notificationId })); }; LocalNotification.prototype.cancelAll = function() { cordova.exec(null, null, 'LocalNotification', 'cancelAll', new Array()); }; var LocalNotification = new LocalNotification(); module.exports = LocalNotification });
更新#1:我已经将插件添加到plugins.xml文件中:
<plugins> ... <plugin name="LocalNotification" value="com.phonegap.plugin.localnotification.LocalNotification"/> ... </plugins>
我已经完成了here提到的步骤并替换了here中提到的破解的java表达式.
不幸的是,当我运行应用程序时,我收到以下错误(在模拟器和设备中):
09-16 16:46:16.330: E/Web Console(27875): Uncaught ReferenceError:
plugins is not defined at file:///android_asset/www/index.html:74
This guy was facing the same problem但是我在index.html中引用了cordova javascript文件,但它仍然无效.
这就是我的包浏览器的样子(你可能会发现缺少的东西):
我不确定我是否应该有plugins.xml或者有config.xml并且有插件,
我只是为了以防万一
提前致谢!
我更改了LocalNotification.js,因此您可以复制代码.它适用于cordova 2.0(经过测试!)cordova.define("cordova/plugin/js/LocalNotification", function(require, exports, module) { var exec = require("cordova/exec"); var LocalNotification = function () {}; LocalNotification.prototype.add = function(options) { var defaults = { date : new Date(), message : '', ticker : '', repeatDaily : false, id : "" }; if (options.date) { options.date = (options.date.getMonth()) + "/" + (options.date.getDate()) + "/" + (options.date.getFullYear()) + "/" + (options.date.getHours()) + "/" + (options.date.getMinutes()); } for ( var key in defaults) { if (typeof options[key] !== "undefined") defaults[key] = options[key]; } cordova.exec(null, null, "LocalNotification", "add", new Array(defaults)); }; LocalNotification.prototype.cancel = function(notificationId) { cordova.exec(null, null, 'LocalNotification', 'cancel', new Array({ id : notificationId })); }; LocalNotification.prototype.cancelAll = function() { cordova.exec(null, null, 'LocalNotification', 'cancelAll', new Array()); }; var LocalNotification = new LocalNotification(); module.exports = LocalNotification;
});
现在你可以打电话给通知.有:
datum = '2012-09-20 15:51:00'; tt1 = datum.split(/[- :]/); dd = new Date(tt1[0], tt1[1]-1, tt1[2], tt1[3], tt1[4], tt1[5]); window.plugins.LocalNotification.add({ date: dd, message: "Some message", ticker : "Some ticker", repeatDaily : false, id: 1234 });