Android Broadcast intent

I am sending a message whit Google service from my desktop to my android when i get the message i am broadcasting whit intent and them passing in to an activity after the broadcast i have a crash of my app my log cut

     W/dalvikvm(27503): threadid=1: thread exiting with uncaught exception (group=0x418e7ba8)
      FATAL EXCEPTION: main
      Process: com.avakoo.service, PID: 27503
      java.lang.RuntimeException: Error receiving broadcast Intent { act=com.avakoo.service.DISPLAY_MESSAGE flg=0x10 (has extras) } in com.avakoo.service.MainActivity$1@4262fb78
        at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:769)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5001)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)
      Caused by: java.lang.NullPointerException
        at com.avakoo.service.MainActivity$1.onReceive(MainActivity.java:226)
        at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:759)
        ... 9 more
     I/Process(27503): Sending signal. PID: 27503 SIG: 9

my GCM service class public class GCMIntentService extends GCMBaseIntentService {

        private static final String TAG = "GCMIntentService";
        private static final int NOTIFICATION_ID = 001;

        public GCMIntentService() {
            super(SENDER_ID);
        }

        /**
         * Method called on device registered
         **/
        @Override
        protected void onRegistered(Context context, String registrationId) {
            Log.i(TAG, "Device registered: regId = " + registrationId);
            displayMessage(context, "Your device registred with GCM");
            Log.d("PASS", RegisterActivity.password);
            ServerUtilities.register(context, RegisterActivity.password, RegisterActivity.email, registrationId);
        }

        /**
         * Method called on device un registred
         * */
        @Override
        protected void onUnregistered(Context context, String registrationId) {
            Log.i(TAG, "Device unregistered");
            displayMessage(context, getString(R.string.gcm_unregistered));
            ServerUtilities.unregister(context, registrationId);
        }

        /**
         * Method called on Receiving a new message
         * */
        @Override
        protected void onMessage(Context context, Intent intent) {
            Log.i(TAG, "Received message");
            //String message = intent.getExtras().getString("message");
            CharSequence[] message1 = intent.getCharSequenceArrayExtra("message");
            String message = " A V A K O O";//intent.getExtras().getString("message");

            displayMessage(context, message);
            // notifies user
            generateNotification(context, message);
        }

        /**
         * Method called on receiving a deleted message
         * */
        @Override
        protected void onDeletedMessages(Context context, int total) {
            Log.i(TAG, "Received deleted messages notification");
            String message = getString(R.string.gcm_deleted, total);
            displayMessage(context, message);
            // notifies user
            generateNotification(context, message);
        }

        /**
         * Method called on Error
         * */
        @Override
        public void onError(Context context, String errorId) {
            Log.i(TAG, "Received error: " + errorId);
            displayMessage(context, getString(R.string.gcm_error, errorId));
        }

        @Override
        protected boolean onRecoverableError(Context context, String errorId) {
            // log message
            Log.i(TAG, "Received recoverable error: " + errorId);
            displayMessage(context, getString(R.string.gcm_recoverable_error,
                    errorId));
            return super.onRecoverableError(context, errorId);
        }

        /**
         * Issues a notification to inform the user that server has sent a message.
         */
        private static void generateNotification(Context context, String message) {

            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 = message;


            Intent notificationIntent = new Intent(context, MyNotification.class);

           /* Intent waIntent = new Intent(Intent.ACTION_SEND);
            waIntent.setType("text/plain");

            waIntent.setPackage("com.whatsapp");
            if (waIntent != null) {
                notificationIntent.setData(Uri.parse("text"));
                waIntent.setFlags(waIntent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(Intent.createChooser(waIntent, "Share with"));
            } */

            notificationIntent.setData(Uri.parse(message));


            // set intent so it does not start a new activity
            notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |Intent.FLAG_ACTIVITY_SINGLE_TOP);
            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);


        }


     }

my display message function public static void displayMessage(Context context, String message) { Intent intent = new Intent(DISPLAY_MESSAGE_ACTION); intent.putExtra(EXTRA_MESSAGE, message); context.sendBroadcast(intent); }


You need to set this flag for your PendingIntent : PendingIntent.FLAG_CANCEL_CURRENT.

PendingIntent.getActivity(this, _ID,
                navigationIntent, PendingIntent.FLAG_CANCEL_CURRENT);

Using this flag, your intent message will not be null on the receiver

链接地址: http://www.djcxy.com/p/67904.html

上一篇: Android putExtra无法解析符号

下一篇: Android广播意图