问题
I have created an app that is receiving GCM notifications correctly. When I have the app open the notification is ringing and also the notification comes properly as a big box as defined in the code below:
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
// .setLargeIcon(imageBitmap)
.setTicker("CheGroup")
.setContentTitle(title)
.setContentText(message)
.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_ALL)
.setContentIntent(pendingIntent)
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(message));
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
The notification is coming even when the app is closed or the phone is locked, but the phone is not vibrating/ringing. Also the notification appears only as a one line box (not with the BigTextStyle as defined), so a part of the notification message can't be read. So the features defined in the NotificationCompat.Builder are working only if the app is open. My question is how to make the notification ring when the app is closed, and also make it appear in BigTextStyle. Note that these settings are working properly when the app is open.
PS. the permissions are added in the manifest file:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission
android:name="es.appbit.chegroup.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="es.appbit.chegroup.permission.C2D_MESSAGE" />
回答1:
put it onReceive
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
ComponentName componentInfo = taskInfo.get(0).topActivity;
if(componentInfo.getPackageName().equalsIgnoreCase("com.example.myapp")){
updateMyActivity(message); //send broadcast to notify app
//Activity Running
// Send a broadcast with the intent-filter which you register in your activity
// where you want to have the updates
}
else{
//Activity Not Running
//Generate Notification
sendNotification(message);
}
and call this method
private void sendNotification(String message) {
Intent intent = new Intent(this,FullMapActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// int color = getResources().getColor(R.color.my_notif_color);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
/*PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 *//* Request code *//*, intent,
PendingIntent.FLAG_ONE_SHOT);*/
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.headerlogo)
.setContentTitle("hey..! your booking is confirmed")
.setContentText(message)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}
else
{
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.headerlogo)
.setContentTitle("hey..! your booking is confirmed")
.setContentText(message)
.setAutoCancel(true)
// .setColor(color)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}
}
来源:https://stackoverflow.com/questions/36152268/android-gcm-notification-builder-features-not-working-when-app-is-closed