Ankitkumar Makwana
Ankitkumar Makwana

Reputation: 3485

Android GCMIntentService BroadcastReceiver getting common Messag issue

After Register to GCMRegistrar i have get regID SuccessFully in My MainActivity class

private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String newMessage = intent.getExtras().getString(EXTRA_MESSAGE);
            // Waking up mobile if it is sleeping               
              WakeLocker.acquire(getApplicationContext());          

                  Here Im getting Message Id store in my sharedPref and make Login

            // Releasing wake lock
            WakeLocker.release();
        }
    };

and this regID pass to myLogin Api SuccessFully, and store in My SharedPrefrence and when again when getting Any Message from Server then my regId key Override and again pass it to my login Api. i want to make separate server Message and regId Message in

public class GCMIntentService extends GCMBaseIntentService {

    private static final String TAG = "GCMIntentService";

    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("NAME", MainActivity.name);
        ServerUtilities.register(context, MainActivity.name, MainActivity.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("price");

        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 = context.getString(R.string.app_name);        
        Intent notificationIntent = new Intent(context, MainActivity.class);
        // 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;        
        //notification.sound = Uri.parse("android.resource://" + context.getPackageName() + "your_sound_file_name.mp3");        
        // Vibrate if vibrate is enabled
        notification.defaults |= Notification.DEFAULT_VIBRATE;
        notificationManager.notify(0, notification);      

    }

}

also CommonUtilities is common to show Message

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

my issue Is want make Seprate regId and Server Message in BroadcastReceiver Intent

Upvotes: 0

Views: 1483

Answers (1)

javid piprani
javid piprani

Reputation: 1965

you can differentiate in OnMessage by predefine parameter set onMessage like below code describe.

Method called on Receiving a new message

@Override
        protected void onMessage(Context context, Intent intent) {
            Log.i(TAG, "Received message");
             Log.i(TAG, "Received message");
            String message = intent.getExtras().getString("price");

            if(message!=null)
            {
                    if(operation.equals("server"))
                    {

                      CommonUtilities.displayMessage(context, "message"); // call intent for message to server
                    }
                    else
                    {
                     //code for regId here
                       CommonUtilities.displayMessage(context, "regID"); // call intent  for regid 
                    }
            }  
            displayMessage(context, message);
            // notifies user

        }

CommonUtilities is common to show Message u can call BroadcastReceiver based on message values

 static void displayMessage(Context context, String message) 
    {

        if(message.equals("regID")) 
        {
            //broadcast rec. for registrattion 
            Intent intent = new Intent(DISPLAY_MESSAGE_ACTION);
            intent.putExtra(EXTRA_MESSAGE, message);
            context.sendBroadcast(intent);
        }else
        {
            //broadcast rec. for send message to server 
            Intent intent = new Intent(DISPLAY_MESSAGE_ACTION);
            intent.putExtra(EXTRA_MESSAGE, message);
            context.sendBroadcast(intent);
        }     

        }

Upvotes: 1

Related Questions