0

仕様: WebWorks 2.2、Curve 9330 OS 6 シミュレーターおよびデバイス

私たちは、ほぼすべてを試しましたが、これを理解することはできません. ここで指定されているように、私のアプリケーションにはメイン ページ (index.html) とバックグラウンド ページ (listener.html) があります。

<?xml version="1.0" encoding="UTF-8"?>
<widget xmlns="http://www.w3.org/ns/widgets" 
   xmlns:rim="http://www.blackberry.com/ns/widgets" 
   version="1.0.0.0" rim:header="SimpleSMS">
   <name>SimpleSMS</name>
   <description>Simple SMS</description>
   <content src="index.html">
       <rim:background src="listener.html" runOnStartup="true" />
   </content>
   <rim:navigation mode="focus" />
   <access subdomains="false" uri="http://jsconsole.com"/>
   <feature id="blackberry.message.sms" />
   <feature id="blackberry.app" />
   <feature id="blackberry.io.dir" />
   <feature id="blackberry.io.file" />
   <feature id="blackberry.utils" />
</widget>

listener.html は次のようになります。

<!DOCTYPE html>
<html>
    <head>
    <script type="text/javascript" src="message_db2.js"></script>
    <script type="text/javascript">
    </script>
    </head>
    <body onload="initializeListener();">
    </body>
</html>

initializeListener() 関数は次のとおりです。

function initializeListener() {
    blackberry.message.sms.isListeningForMessage = true;
    blackberry.message.sms.addReceiveListener(messageListener);
}

問題: アプリをインストールしてリスナーが実行を開始すると、アプリは問題なくテキスト メッセージを受信できます。メインアプリケーションを開くとすぐに、問題が始まります。戻るボタンまたは終了ボタンを使用してアプリをバックグラウンドに最小化すると、次に受信した SMS で例外が発生します。メニューからアプリを閉じると、例外はありませんが、リスナーは機能しなくなります。messageListener のすべてのコードにコメントを付けましたが、index.html はまったく何もせず、いくつかの html を表示します。背景ページを持つことに関するドキュメントはほとんどありません。誰にもアイデアはありますか?前もって感謝します。

4

1 に答える 1

0

webworks がこれらの異なるページに移動し、前のページにあるものをすべて破棄している可能性はありますか? (ブラウザで新しいページに移動したときに入力したフォームに何が起こるかのように)

アプリがフォアグラウンドまたはバックグラウンドになるタイミングを確認するために、アプリケーション イベントを利用する必要があるかもしれません。多分再確認 isListeningForMessage?

みたいなことを考えている

function onFG()
{
  if (!blackberry.message.sms.isListeningForMessage)
  {
    blackberry.message.sms.isListeningForMessage = true;
    blackberry.message.sms.addReceiveListener(messageListener);
  }
}

blackberry.app.event.onForeground(onFG);

コードが実行されている場所を区別する必要がある場合は、 isForeground booleanを使用することもできます。

于 2012-01-19T23:02:12.440 に答える