PhoneGapと一緒にC2DMを使用しています。 C2DMメッセージを受信すると、通知が表示されます(NotificationManager
経由)。ユーザーが通知を選択すると、アプリケーションはインテントを受信します。その場合、jquery-mobile webapp内のページをアクティブにしたいと思います。PhonegapとC2DM - NullPointerException
ので、私は意図を保存するためにonNewIntent
イベントをオーバーライド:、その後
@Override
protected void onNewIntent(final Intent intent)
{
super.onNewIntent(intent);
setIntent(intent);
}
意図はC2DMからだった場合onResume
に、私は正しいページをアクティブ化:
@Override
protected void onResume()
{
super.onResume();
// read possible argument
boolean showMessage = getIntent().getBooleanExtra(ARG_SHOW_MESSAGES, false);
if (showMessage)
{
clearNotification();
super.loadUrl("file:///android_asset/www/de/index.html#messages");
}
}
これは正常に動作しますが、それモバイルやエミュレータではなく、他のデバイスでNullPointerExceptionが発生してクラッシュすることがあります。スタックトレースはCodeを参照してください、それはDroidGap
活動のonNewIntent
であると言う:
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//Forward to plugins
this.pluginManager.onNewIntent(intent);
}
私はこのような状況を再現することができませんでした。明らかにpluginManagerはnullですが、なぜそうはしません。
だから、質問は以下のとおりです。
- は、Android良いからjqueryの、モバイルで特定のページを選択するために取られたアプローチですか誰かがより良いアプローチを指摘することができますか?
- 例外を取り除くにはどうすればよいですか?もちろん、私はpluginManagerをbeeing nullにチェックすることができます。この場合はsuperを呼び出さないでください。しかし、私の特定のページはアクティブ化されません。
- これはPhoneGapのバグだと思いますか?pluginmanagerでnullをチェックしないでください。私はPhoneGapコードをチェックしたとき、これは決して起こらないはずだと私は考えていました。onNewIntentはアクティビティが読み込まれたときにのみ呼び出されます。そうでなければonCreateがトリガーされます。
更新 私はもっと今知っている:アプリケーションがロードされていないときに問題が発生し、C2DMメッセージが到着しました。 意図は、イベントが次の順序で発生し、アプリを起動します - しかしonNewIntentはたまにしか呼び出されます。onNewIntentは、それがクラッシュし、起動時に実行されるたびに
onCreate()
onNewIntent()
onResume()
。私はonResume-イベントにスタートページを変更したい場合はPhoneGapの準備ができていないとき、これは動作しません
@Override
protected void onNewIntent(final Intent intent)
{
// avoid Phonegap bug
if (pluginManager != null)
{
super.onNewIntent(intent);
}
setIntent(intent);
}
:とにかく私はこれを修正しました。したがって、アプリケーションが起動している場合は、onResumeの#messagesページを呼び出すのは早い時期です。しかしそれをいつ呼び出すのですか? onDeviceReadyに接続する可能性はありますか?