如何使用GCM发送消息?

时间:2013-03-18 22:29:09

标签: android notifications google-cloud-messaging

我想在android上的通知区域显示通知消息。现在这个只显示应用程序标题。 我正在寻找logcat,但我没有看到System.out.println(newMessage)中没有System.out输出;

我有这堂课:

/**
 * Author       : Taufan E.
 * App Name     : The Restaurant App
 * Release Date : October 2012
 */
package com.the.restaurant;


public class Home extends Activity {


    String gcm_regId="";

    static DBHelper dbhelper;
    MainMenuAdapter mma;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home);




        //GCMRegistrar.unregister(this);
        // Make sure the device has the proper dependencies.
                GCMRegistrar.checkDevice(this);

                // Make sure the manifest was properly set - comment out this line
                // while developing the app, then uncomment it when it's ready.
                //GCMRegistrar.checkManifest(this);



                gcm_regId = GCMRegistrar.getRegistrationId(this);
                if(gcm_regId.equals("")){
                    GCMRegistrar.register(this, Utils.SENDER_ID);
                }
                System.out.println(gcm_regId);

                registerReceiver(mHandleMessageReceiver, new IntentFilter("com.the.restaurant.DISPLAY_MESSAGE"));

        if (!Utils.isNetworkAvailable(Home.this)) {
            Toast.makeText(Home.this, getString(R.string.no_internet), Toast.LENGTH_SHORT).show();
        }

        mma = new MainMenuAdapter(this);
        dbhelper = new DBHelper(this);
        listMainMenu.setAdapter(mma);

    }
    @Override
    protected void onPause(){
        super.onPause();
        unregisterReceiver(mHandleMessageReceiver);
    }

    @Override
    protected void onResume(){
        super.onResume();
        registerReceiver(mHandleMessageReceiver, new IntentFilter("com.the.restaurant.DISPLAY_MESSAGE"));
    }

    private void displayNotification(final Context theContext,String message){
        long when = System.currentTimeMillis();
        int icon = R.drawable.cover_image;

        NotificationManager notificationManager = (NotificationManager)
                theContext.getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notification = new Notification(icon, message, when);

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

        Intent notificationIntent = new Intent();
        // 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(theContext, 0, notificationIntent, 0);
        notification.setLatestEventInfo(theContext, 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);   
    }

    private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String newMessage = intent.getExtras().getString("rezervare");

            // Waking up mobile if it is sleeping
            WakeLocker.acquire(getApplicationContext());

            /**
             * Take appropriate action on this message
             * depending upon your app requirement
             * For now i am just displaying it on the screen
             * */

            // Showing received message
            //lblMessage.append(newMessage + "\n");
            System.out.println(newMessage);
            Toast.makeText(getApplicationContext(), "New Message: " + newMessage, Toast.LENGTH_LONG).show();

            displayNotification(context,newMessage);
            //sendnotification("The Restaurant App","Mesaj");
            //GCMRegistrar.unregister(Reservation.class);
            // Releasing wake lock
            WakeLocker.release();
        }
    };
}

2 个答案:

答案 0 :(得分:0)

您需要先建立通知:

// Pop up Notification
NotificationCompat.Builder mBuilder =  new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.ic_launcher)
        .setContentTitle("New Notification Title")
        .setContentText("This is notification content.");
// Creates an explicit intent for an Activity in your app
Intent resultIntent = new Intent(this, ClassToLaunch.class);

// The stack builder object will contain an artificial back stack for the
// started Activity.
// This ensures that navigating backward from the Activity leads out of
// your application to the Home screen.
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
// Adds the back stack for the Intent (but not the Intent itself)
stackBuilder.addParentStack(ClassToLaunch.class);
// Adds the Intent that starts the Activity to the top of the stack
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
        stackBuilder.getPendingIntent(
            0,
            PendingIntent.FLAG_UPDATE_CURRENT
        );

mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify("tag", mBuilder.build()); 

答案 1 :(得分:0)

根据您的问题,您无法看到以下行的输出:

     System.out.println(newMessage);

并且您还希望在执行以下方法后显示我可以看到的通知:

    displayNotification(context,newMessage);

<强>答案:

您希望执行的代码位于BroadcastReceiver的onReceive方法下,这意味着当生成特殊意图时,将调用此方法onReceive,该方法将在onCreate方法中注册到该行:

  registerReceiver(mHandleMessageReceiver, new IntentFilter("com.the.restaurant.DISPLAY_MESSAGE"));

您可以通过以下方式广播Intent:

   Intent intent = new Intent();
   intent.setAction("com.the.restaurant.DISPLAY_MESSAGE");
   sendBroadcast(intent);  ///sendBroadcast is a Context (Activity) method