1

enter image description here

I am trying to create a notification for Incoming call. For that I have added two actions in notification. My action text only is displayed.Action icon is not displayed in notification. I want to add icon near Answer and cancel which I added as AddAction in Notification. I have added action icon like below,


NotificationCompat.Action answerAction = new NotificationCompat.Action.Builder(R.drawable.answer_call_icon, "Answer", pendingIntent).build();
            NotificationCompat.Action cancelAction = new NotificationCompat.Action.Builder(R.drawable.cancel, "Cancel", pendingIntent).build();

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
                .setLargeIcon((BitmapFactory.decodeResource(getResources(), R.drawable.call_logo)))
                .setContentTitle(intent.getStringExtra("Number"))
                .setSmallIcon(R.drawable.call_logo)
                .setContentIntent(pendingIntent)
                .setAutoCancel(true)
                .setFullScreenIntent(pendingIntent, true)
                .setCategory(NotificationCompat.CATEGORY_CALL)
                .addAction(answerAction)
                .addAction(cancelAction)
                .setPriority(NotificationCompat.PRIORITY_HIGH);
        NotificationManagerCompat nManager = NotificationManagerCompat.from(this);
        nManager.notify(2,builder.build());

One more query, Below is my notification channnel,

NotificationChannel   chan = new NotificationChannel(NOTIFICATION_CHANNEL_ID, channelName, NotificationManager.IMPORTANCE_HIGH);
            chan.setLightColor(Color.BLUE);
           chan.setLockscreenVisibility(Notification.FLAG_FOREGROUND_SERVICE);
            chan.setImportance(NotificationManager.IMPORTANCE_HIGH);
            chan.setSound(defaultRingToneUri,audioAttributes);
 chan.enableLights(true);
            chan.shouldShowLights();
            chan.setVibrationPattern(vibrate);
            chan.enableVibration(true);
            Context context=getApplicationContext();
            NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            assert manager != null;
            manager.createNotificationChannel(chan);

Not able to get ringtone while receiving notification. Is the way Im setting sound is right?? Anybody please help me to solve this... Posted 2 days ago..but till now not able to find solution.

Zoe
  • 27,060
  • 21
  • 118
  • 148
Kousalya
  • 700
  • 10
  • 29
  • @VahidHoseini I want to achieve like WhatsApp incoming call with Answer and Decline actions... – Kousalya Mar 24 '20 at 13:45
  • Please don't tag questions with the android-studio tag just because you use it: the Android Studio tag should **only** be used when you have questions about the IDE itself, and not any code you write (or want to write) in it. See [when is it appropriate to remove an IDE tag](https://meta.stackoverflow.com/a/315196/6296561), [How do I avoid misusing tags?](https://meta.stackoverflow.com/q/354427/6296561), and [the tagging guide](/help/tagging). Use [android] or other relevant tags instead. – Zoe Mar 27 '20 at 12:06
  • have you seen this? https://developer.android.com/training/notify-user/custom-notification aparently you can defie a custom layout for a notification. not surw how powerful it is though – quealegriamasalegre Mar 28 '20 at 03:44

4 Answers4

4

As per the Notifications in Android N blog post:

Notification actions have also received a redesign and are now in a visually separate bar below the notification.

You’ll note that the icons are not present in the new notifications; instead more room is provided for the labels themselves in the constrained space of the notification shade. However, the notification action icons are still required and continue to be used on older versions of Android and on devices such as Android Wear.

So it is expected that you do not see the icons associated with notification actions.

Community
  • 1
  • 1
ianhanniballake
  • 191,609
  • 30
  • 470
  • 443
  • Note that notification channels are *not editable* after creation (they become the user's settings to change, not your app's) - you'll need to completely uninstall and reinstall your app if you want to change the channel's ringtone. – ianhanniballake Apr 01 '20 at 00:26
1

If you need more flexibility in creating the notification layout, go for the custom one.

Ref: https://developer.android.com/training/notify-user/custom-notification

Use the Drawable left/right option to set an icon with text in the button.

// Get the layouts to use in the custom notification
RemoteViews notificationLayout = new RemoteViews(getPackageName(), R.layout.notification_small);
RemoteViews notificationLayoutExpanded = new RemoteViews(getPackageName(), R.layout.notification_large);

// Apply the layouts to the notification
Notification customNotification = new NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.notification_icon)
        .setStyle(new NotificationCompat.DecoratedCustomViewStyle())
        .setCustomContentView(notificationLayout)
        .setCustomBigContentView(notificationLayoutExpanded)
        .build();
Leons
  • 201
  • 1
  • 7
0

As I understand: you have a problem with your notification you can use this method :

 private void showSmallNotification(NotificationCompat.Builder mBuilder, int icon, String title, String message, String timeStamp, PendingIntent resultPendingIntent, Uri alarmSound) {

    NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
    inboxStyle.addLine(message);

    Notification notification;
    notification = mBuilder.setSmallIcon(icon).setTicker(title).setWhen(0)
            .setAutoCancel(true)
            .setContentTitle(title)
            .setContentIntent(resultPendingIntent)
            .setSound(alarmSound)
            .setStyle(inboxStyle)
            .setWhen(getTimeMilliSec(timeStamp))
            .setContentText(message)
            .build();

    NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(Constant.NOTIFICATION_ID, notification);
}

or this one :

 private void showBigNotification(Bitmap bitmap, NotificationCompat.Builder mBuilder, int icon, String title, String message, String timeStamp, PendingIntent resultPendingIntent, Uri alarmSound) {
    NotificationCompat.BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle();
    bigPictureStyle.setBigContentTitle(title);
    bigPictureStyle.setSummaryText(Html.fromHtml(message).toString());
    bigPictureStyle.bigPicture(bitmap);
    Notification notification;
    notification = mBuilder.setSmallIcon(icon).setTicker(title).setWhen(0)
            .setAutoCancel(true)
            .setContentTitle(title)
            .setContentIntent(resultPendingIntent)
            .setSound(alarmSound)
            .setStyle(bigPictureStyle)
            .setWhen(getTimeMilliSec(timeStamp))

            .setContentText(message)
            .build();

    NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(Constant.NOTIFICATION_ID_BIG_IMAGE, notification);
}
VahidHoseini
  • 495
  • 2
  • 10
  • 28
0

To play ringtone you can make use of android mediaplayer as shown below:

Var _mediaPlayer = MediaPlayer.Create(this,
Android.Provider.Settings.System.DefaultRingtoneUri);
_mediaPlayer.Start();
Task.Delay(60 * 1000).ContinueWith(t => _mediaPlayer?.Stop()); //stop after 60sec

You can take the global instance of _mediaPlayer and stop this as per user interaction with notification.

This is the c# xamarin android example, you can use the same class with java syntax.

Suchith
  • 1,276
  • 17
  • 39