应用关闭时,Android GCM通知构建器功能无法正常工作

时间:2016-03-22 10:44:52

标签: android push-notification google-cloud-messaging

我创建了一个正确接收GCM通知的应用。当我打开应用程序时,通知正在响铃,并且通知也会正确显示为下面代码中定义的大框:

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

即使应用关闭或手机已锁定,但手机没有振动/响铃,通知即将发出。此外,通知仅显示为一行框(不是定义的BigTextStyle),因此无法读取通知消息的一部分。因此,只有在应用程序打开时,NotificationCompat.Builder中定义的功能才有效。我的问题是如何在关闭应用程序时使通知响铃,并使其显示在BigTextStyle中。请注意,这些设置在应用程序打开时正常工作。

PS。权限将添加到清单文件中:

<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 个答案:

答案 0 :(得分:0)

把它放在接收

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);
        }

并调用此方法

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