Android 如何使用GCM发送消息?
我想在android上的通知区域显示通知消息。现在只显示应用程序标题。 我正在logcat中查找,但我没有看到来自line System.out.println(newMessage)的System.out输出 我有这门课: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
/**
* 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)。