Custom notification click listener not working in android api 26 above

405 Views Asked by At

Notification works perfectly bellow api lavel 26 but 26 and above android version notification shows but click event not working. I have MusicPlayerReceiver to handle click. Above 26 api MusicPlayerReceiver not call. but bellow 26 that call perfectly. I check stackoverflow solution but none of that work for me.

 private void createNotification(SuraDetail mSongDetail) {
                try {
                    String songName = mSongDetail.getTitle();
                    String authorName = mSongDetail.getArtist();
                    String albumName = mSongDetail.getDisplay_name();
                    SuraDetail audioInfo = MediaController.getInstance().getPlayingSongDetail();

                    RemoteViews simpleContentView = new RemoteViews(getApplicationContext().getPackageName(), R.layout.player_small_notification);
                    RemoteViews expandedView = null;
                    if (supportBigNotifications) {
                        expandedView = new RemoteViews(getApplicationContext().getPackageName(), R.layout.player_small_notification);
                    }

                    Intent intent = new Intent(MyApplication.applicationContext, PobitroQuranDetailsActivity.class);
                    intent.setAction("openplayer");
                    intent.setFlags(32768);
                    PendingIntent contentIntent = PendingIntent.getActivity(MyApplication.applicationContext, 0, intent, 0);

                    Notification notification = new NotificationCompat.Builder(getApplicationContext()).setSmallIcon(R.drawable.quran)
                            .setContentIntent(contentIntent).setContentTitle(songName).build();

                    notification.contentView = simpleContentView;
                    if (supportBigNotifications) {
                        notification.bigContentView = expandedView;
                    }

                    setListeners(simpleContentView);
                    if (supportBigNotifications) {
                        setListeners(expandedView);
                    }

                    Bitmap albumArt = audioInfo != null ? audioInfo.getSmallCover(MyApplication.applicationContext) : null;

                    if (albumArt != null) {
                        notification.contentView.setImageViewBitmap(R.id.player_album_art, albumArt);
                        if (supportBigNotifications) {
                            notification.bigContentView.setImageViewBitmap(R.id.player_album_art, albumArt);
                        }
                    } else {
                        notification.contentView.setImageViewResource(R.id.player_album_art, R.drawable.quran);
                        if (supportBigNotifications) {
                            notification.bigContentView.setImageViewResource(R.id.player_album_art, R.drawable.quran);
                        }
                    }
                    notification.contentView.setViewVisibility(R.id.player_progress_bar, View.GONE);
                    notification.contentView.setViewVisibility(R.id.player_next, View.VISIBLE);
                    notification.contentView.setViewVisibility(R.id.player_previous, View.VISIBLE);
                    if (supportBigNotifications) {
                        notification.bigContentView.setViewVisibility(R.id.player_next, View.VISIBLE);
                        notification.bigContentView.setViewVisibility(R.id.player_previous, View.VISIBLE);
                        notification.bigContentView.setViewVisibility(R.id.player_progress_bar, View.GONE);
                    }

                    if (MediaController.getInstance().isAudioPaused()) {
                        notification.contentView.setViewVisibility(R.id.player_pause, View.GONE);
                        notification.contentView.setViewVisibility(R.id.player_play, View.VISIBLE);
                        if (supportBigNotifications) {
                            notification.bigContentView.setViewVisibility(R.id.player_pause, View.GONE);
                            notification.bigContentView.setViewVisibility(R.id.player_play, View.VISIBLE);
                        }
                    } else {
                        notification.contentView.setViewVisibility(R.id.player_pause, View.VISIBLE);
                        notification.contentView.setViewVisibility(R.id.player_play, View.GONE);
                        if (supportBigNotifications) {
                            notification.bigContentView.setViewVisibility(R.id.player_pause, View.VISIBLE);
                            notification.bigContentView.setViewVisibility(R.id.player_play, View.GONE);
                        }
                    }

                    notification.contentView.setTextViewText(R.id.player_song_name, songName);
                    notification.contentView.setTextViewText(R.id.player_author_name, authorName);
                    if (supportBigNotifications) {
                        notification.bigContentView.setTextViewText(R.id.player_song_name, songName);
                        notification.bigContentView.setTextViewText(R.id.player_author_name, authorName);
        //                notification.bigContentView.setTextViewText(R.id.player_albumname, albumName);
                    }
                    notification.flags |= Notification.FLAG_ONGOING_EVENT;
                    startForeground(1, notification);

                    if (remoteControlClient != null) {
                        RemoteControlClient.MetadataEditor metadataEditor = remoteControlClient.editMetadata(true);
                        metadataEditor.putString(MediaMetadataRetriever.METADATA_KEY_ARTIST, authorName);
                        metadataEditor.putString(MediaMetadataRetriever.METADATA_KEY_TITLE, songName);
                   /*     if (audioInfo != null && audioInfo.getCover(MyApplication.applicationContext) != null) {
                            metadataEditor.putBitmap(RemoteControlClient.MetadataEditor.BITMAP_KEY_ARTWORK,
                                    audioInfo.getCover(MyApplication.applicationContext));
                        }*/
                        metadataEditor.apply();
                        audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            public void setListeners(RemoteViews view) {
                try {
                    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, new Intent(NOTIFY_PREVIOUS),
                            PendingIntent.FLAG_UPDATE_CURRENT);
                    view.setOnClickPendingIntent(R.id.player_previous, pendingIntent);
                    pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, new Intent(NOTIFY_CLOSE), PendingIntent.FLAG_UPDATE_CURRENT);
                    view.setOnClickPendingIntent(R.id.player_close, pendingIntent);
                    pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, new Intent(NOTIFY_PAUSE), PendingIntent.FLAG_UPDATE_CURRENT);
                    view.setOnClickPendingIntent(R.id.player_pause, pendingIntent);
                    pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, new Intent(NOTIFY_NEXT), PendingIntent.FLAG_UPDATE_CURRENT);
                    view.setOnClickPendingIntent(R.id.player_next, pendingIntent);
                    pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, new Intent(NOTIFY_PLAY), PendingIntent.FLAG_UPDATE_CURRENT);
                    view.setOnClickPendingIntent(R.id.player_play, pendingIntent);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
1

There are 1 best solutions below

0
vanomart On

I noticed exactly the same issue in my app. The issue is apparently caused by the way an intent is constructed, so instead of calling

new Intent(String action);

it's now required to call

new Intent (String action, 
            Uri uri, 
            Context packageContext, 
            Class<?> cls)