PhoneGap과 함께 C2DM을 사용하고 있습니다. C2DM 메시지를 받으면 NotificationManager
을 통해 알림을 표시합니다. 사용자가 알림을 선택하면 내 애플리케이션이 의도를 수신합니다. 이 경우 jquery-mobile webapp 내에서 페이지를 활성화하고 싶습니다. Phonegap 및 C2DM - NullPointerException
onNewIntent
이벤트를 오버라이드 : 의도 C2DM에서라면 그런
@Override
protected void onNewIntent(final Intent intent)
{
super.onNewIntent(intent);
setIntent(intent);
}
을 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이지만 왜 그런지는 알지 못합니다.
그래서 질문은 다음과 같습니다- 안드로이드 좋은에서 JQuery와 모바일에서 특정 페이지를 선택하는 촬영 방식인가, 아니면 사람이 더 나은 방법을 지적 할 수 있습니까?
- 예외를 제거하려면 어떻게해야합니까? 물론 beeing null에 대한 pluginManager를 확인할 수 있지만이 경우에는 super를 호출하지 않습니다. 그런 다음 내 특정 페이지가 활성화되지 않습니다.
- 이것이 PhoneGap 버그라고 생각하십니까? pluginmanager가 null인지 확인하지 않으시겠습니까? 이것이 결코 일어나지 않아야한다고 생각한 PhoneGap 코드를 확인했을 때, onNewIntent는 액티비티가로드 될 때만 호출됩니다. 그렇지 않으면 onCreate가 대신 트리거됩니다.
업데이트 좀 더 지금 알고 : 응용 프로그램을로드하고 C2DM 메시지가 도착하지 않을 경우 문제가 발생합니다. 목적은 이벤트가 다음 순서로 발생, 응용 프로그램을 시작합니다 -하지만 onNewIntent 가끔씩 만 호출됩니다 onNewIntent는이 충돌 시작시에 실행 때마다
onCreate()
onNewIntent()
onResume()
. 나는 onResume - 이벤트의 시작 페이지를 변경하려면 폰갭가 준비되지 않은 경우,이 작동하지 않습니다
@Override
protected void onNewIntent(final Intent intent)
{
// avoid Phonegap bug
if (pluginManager != null)
{
super.onNewIntent(intent);
}
setIntent(intent);
}
: 어쨌든 나는 이것을 해결했습니다. 따라서 응용 프로그램이 시작될 경우 onResume에서 #messages 페이지를 호출하는 것이 초기 단계입니다. 그러나 언제 부를 것인가? onDeviceReady에 연결할 가능성이 있습니까?