Android 如何使用GCM发送消息?

Android 如何使用GCM发送消息?,android,notifications,google-cloud-messaging,Android,Notifications,Google Cloud Messaging,我想在android上的通知区域显示通知消息。现在只显示应用程序标题。 我正在logcat中查找,但我没有看到来自line System.out.println(newMessage)的System.out输出 我有这门课: /** * Author : Taufan E. * App Name : The Restaurant App * Release Date : October 2012 */ package com.the.restaurant; pub

我想在android上的通知区域显示通知消息。现在只显示应用程序标题。 我正在logcat中查找,但我没有看到来自line 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();
        }
    };
}

您需要首先生成通知:

// 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()); 

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

     System.out.println(newMessage);
您还希望显示我可以看到的通知,该通知将在执行以下方法后显示:

    displayNotification(context,newMessage);
回答:

   Intent intent = new Intent();
   intent.setAction("com.the.restaurant.DISPLAY_MESSAGE");
   sendBroadcast(intent);  ///sendBroadcast is a Context (Activity) method
您希望执行的代码位于BroadcastReceiver的onReceive方法下,这意味着当生成特殊意图时,将调用此方法onReceive,该特定意图已在您的onCreate方法中注册到以下行:

  registerReceiver(mHandleMessageReceiver, new IntentFilter("com.the.restaurant.DISPLAY_MESSAGE"));
您可以通过以下方式广播意图:

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

您必须广播一个意图…我已经编辑了我的答案,请看一看…或者应该在您的代码库中搜索广播意图的活动。但这对我不好。NotificationCompat需要API 16,我的目标是较低的API版本(最小值为7)。