2015-06-04 3 views
3

Я использую gcm.jar для Push-уведомлений. Когда я запускаю свое приложение, я пытаюсь зарегистрировать Push-уведомления, но он всегда разбился.Android Crash во время регистрации Push-уведомления

06-04 10:08:32.479: E/BroadcastReceiver(26774): BroadcastReceiver trying to return result during a non-ordered broadcast 
06-04 10:08:32.479: E/BroadcastReceiver(26774): java.lang.RuntimeException: BroadcastReceiver trying to return result during a non-ordered broadcast 
06-04 10:08:32.479: E/BroadcastReceiver(26774):  at android.content.BroadcastReceiver.checkSynchronousHint(BroadcastReceiver.java:783) 
06-04 10:08:32.479: E/BroadcastReceiver(26774):  at android.content.BroadcastReceiver.setResult(BroadcastReceiver.java:658) 
06-04 10:08:32.479: E/BroadcastReceiver(26774):  at com.google.android.gcm.GCMBroadcastReceiver.onReceive(GCMBroadcastReceiver.java:56) 
06-04 10:08:32.479: E/BroadcastReceiver(26774):  at android.app.ActivityThread.handleReceiver(ActivityThread.java:2394) 
06-04 10:08:32.479: E/BroadcastReceiver(26774):  at android.app.ActivityThread.access$1500(ActivityThread.java:145) 
06-04 10:08:32.479: E/BroadcastReceiver(26774):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1322) 
06-04 10:08:32.479: E/BroadcastReceiver(26774):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-04 10:08:32.479: E/BroadcastReceiver(26774):  at android.os.Looper.loop(Looper.java:137) 
06-04 10:08:32.479: E/BroadcastReceiver(26774):  at android.app.ActivityThread.main(ActivityThread.java:5095) 
06-04 10:08:32.479: E/BroadcastReceiver(26774):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-04 10:08:32.479: E/BroadcastReceiver(26774):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-04 10:08:32.479: E/BroadcastReceiver(26774):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898) 
06-04 10:08:32.479: E/BroadcastReceiver(26774):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) 
06-04 10:08:32.479: E/BroadcastReceiver(26774):  at dalvik.system.NativeStart.main(Native Method) 

И мой Menifest.xml является

<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<uses-permission android:name="com.app.example.permission.C2D_MESSAGE" /> 

<permission 
    android:name="com.app.example.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 


    <receiver 
     android:name="com.google.android.gcm.GCMBroadcastReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND" > 
     <intent-filter> 

      <!-- Receives the registration id. --> 
      <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

      <!-- Receives the actual messages. --> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 

      <category android:name="com.app.example" /> 
     </intent-filter> 
    </receiver> 

    <service android:name="com.app.example.GCMIntentService" /> 

Мой BroadcastReciever Код ниже

public class GCMIntentService extends GCMBaseIntentService { 

@SuppressWarnings("hiding") 
private static final String TAG = "GCMIntentService "; 

public GCMIntentService() { 
    super(SENDER_ID); 
} 

@Override 
protected void onRegistered(Context context, String registrationId) { 
    PreferenceManager.getDefaultSharedPreferences(context).edit() 
      .putString("REGISTRATION_KEY", registrationId).commit(); 
} 

@Override 
protected void onUnregistered(Context context, String registrationId) { 
    // Debuger.e(TAG, "Device unregistered"); 
} 

@Override 
protected void onMessage(Context context, Intent intent) { 
      handleMessage(context, intent); 
} 

@Override 
protected void onDeletedMessages(Context context, int total) { 
} 

@Override 
public void onError(Context context, String errorId) { 
} 

@Override 
protected boolean onRecoverableError(Context context, String errorId) { 
    // log message 
    return super.onRecoverableError(context, errorId); 
} 

private void handleMessage(Context context, Intent intent) { 
    // Do whatever you want with the message 
    String order_ID = intent.getStringExtra("order_id"); 
    String status_ID = intent.getStringExtra("status_id"); 
    String message = intent.getStringExtra("message"); 

    if (!message.equals("")) { 
     if (order_ID != null && status_ID != null & !status_ID.equals("4")) { 
      Bundle bundle = new Bundle(); 
      bundle.putInt("fromGetItem", 2); 
      mainIntent = new Intent(context.getApplicationContext(), 
        MainActivity.class); 
      mainIntent.putExtras(bundle); 
      mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(mainIntent); 
     } 
     generateNotification(context, message, mainIntent); 
    } 
} 

private static void generateNotification(Context context, String message, 
     Intent notificationIntent) { 
    int icon = R.drawable.ic_launcher; 
    long when = System.currentTimeMillis(); 
    NotificationManager notificationManager = (NotificationManager) context 
      .getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification notification = new Notification(icon, message, when); 

    String title = context.getString(R.string.app_name); 

    PendingIntent intent = PendingIntent.getActivity(context, 0, 
      notificationIntent, 0); 
    notification.setLatestEventInfo(context, title, message, intent); 
    notification.flags |= Notification.FLAG_AUTO_CANCEL; 

    // Play default notification sound 
    notification.defaults |= Notification.DEFAULT_SOUND; 

    // Vibrate if vibrate is enabled 
    notification.defaults |= Notification.DEFAULT_VIBRATE; 
    notificationManager.notify(0, notification); 
} 
} 

Как я могу исправить эту аварию?

+0

Не могли бы вы выслать свой код приемника вещания? – Koh

ответ

3

Я думаю, что вы получаете и обрабатывать ваши сообщения

@Override 
protected void onMessage(Context context, Intent intent) { 
     handleMessage(context, intent); 
} 

Когда приложение отправить запрос на Google для регистрации устройства я не знаю очень хорошо, но несколько раз Google возвращает сообщение, так что если вы анализируют ваши сообщения и Намерение не получите ваш Bundle, и он возвращает null so app crash. Вы можете попробовать с помощью кода ниже, может быть, это помогает.

@Override 
protected void onMessage(Context context, Intent intent) { 
    //Bundle[{CMD=RST_FULL, from=google.com/iid}] 
    Bundle bundle = intent.getExtras(); 
    if (bundle != null) { 
     if (!bundle.containsKey("CMD")) { 
      handleMessage(context, intent); 
     } 
    } 
} 
+0

Пробовал, но все еще не работает :( – NarendraJi

+0

Прошу отлаживать и получать ваше сообщение, когда он получает сообщение. – user123456

0

Если у вас есть метод: setResultCode(), удалите его.

+1

Нет, у меня нет метода: setResultCode() – user123456

+1

У меня такая же проблема, и нет setResultCode(). – Seynorth

Смежные вопросы