Android GCM notification Builder features not working when app is closed

邮差的信 提交于 2019-12-12 01:56:56

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!