4

私は現在、Android4.1をCordova2.0.0およびSketcha(UIライブラリ)と一緒に使用して、 PhoneGapLocalNotificationプラグインを使用しようとしています。

UPDATE#2 20/9/12:Bozzziのコードをいくつか修正して使用しました:

  1. localnotification.jsの最後に})を追加しました(構文エラー)。
  2. に変更さcordova.define("cordova/plugin/LocalNotification", function(require, exports, module)れた cordova.define("cordova/plugin/LocalNotification", function(require, exports, module)ため、モジュール名はこの関数と一致します(モジュールが見つからない前):

    window.plugins.LocalNotification = cordova.require( "cordova / plugin / LocalNotification");

  3. これからの変更:

    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は作成されません。

これらすべての修正を行った後、次のエラーが発生します。

> 09-20 01:22:27.355: D/CordovaLog(8297):
> file:///android_asset/www/index.html: Line 21 : PAPA AMERICANO ready
> 09-20 01:22:27.360: I/Web Console(8297): PAPA AMERICANO ready at
> file:///android_asset/www/index.html:21 09-20 01:22:27.370:
> D/CordovaLog(8297): Uncaught TypeError: Cannot call method 'add' of
> undefined 09-20 01:22:27.375: D/CordovaLog(8297):
> file:///android_asset/www/index.html: Line 35 : Uncaught TypeError:
> Cannot call method 'add' of undefined 09-20 01:22:27.375: E/Web
> Console(8297): Uncaught TypeError: Cannot call method 'add' of
> undefined at file:///android_asset/www/index.html:35 09-20
> 01:22:29.185: D/DroidGap(8297): onMessage(spinner,stop) 09-20
> 01:22:30.255: E/SKIA(8297): FimgApiStretch:stretch failed 09-20
> 01:22:41.755: E/SKIA(8297): FimgApiStretch:stretch failed 09-20
> 01:22:52.565: D/CordovaWebView(8297): >>> loadUrlNow() 09-20
> 01:22:52.565: D/webkit(8297): Firewall not null 09-20 01:22:52.565:
> D/webkit(8297): euler: isUrlBlocked = false

何らかの理由で値を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>

ここで説明した手順を実行し、ここで説明したように壊れたJava式を置き換えまし

残念ながら、アプリケーションを実行すると、次のエラーが発生します(エミュレーターとデバイスの両方で)。

09-16 16:46:16.330:E / Web Console(27875):Uncaught ReferenceError:プラグインがfile:/// android_asset / www / index.html:74で定義されていません

この男は同じ問題に直面していましたが、index.htmlでcordova javascriptファイルを参照しましたが、それでも機能しません。

これは私のパッケージエクスプローラーがどのように見えるかです(何かが足りないかもしれません): plugins.xmlまたはconfig.xmlがあり、プラグインが含まれているべきかどうかわかりません。念のために両方を持っています

パッケージエクスプローラー

前もって感謝します!

4

4 に答える 4

4

プラグインの.jsは2.0.0仕様に更新されていません。2.0.0仕様に準拠するプラグインの作成方法に関する最近のブログ投稿の1つをご覧ください。

http://simonmacdonald.blogspot.ca/2012/08/so-you-wanna-write-phonegap-200-android.html

于 2012-09-16T23:36:20.400 に答える
4

コードをコピーできるようにLocalNotification.jsを変更しました。これはcordova2.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;

});

これで、notifを呼び出すことができます。と:

    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 });
于 2012-09-19T01:58:42.203 に答える
3

cordova 2.2LocalNotification2.2の最新のプラグインアップデートを確認してください

于 2012-11-12T06:43:52.093 に答える
0

プラグインだけでなくwindow.pluginを使用して、何が起こるかを確認してください。

于 2012-09-16T15:14:12.967 に答える