Пользовательский приемник уведомлений о кликах не работает в Android Api 26 выше - PullRequest
0 голосов
/ 23 мая 2018

Уведомление работает отлично ниже api lavel 26, но 26 и выше версия Android показывает уведомление, но событие нажатия не работает.У меня есть MusicPlayerReceiver для обработки кликов.Выше 26 API MusicPlayerReceiver не вызывать.но ниже 26, которые называют отлично.Я проверяю решение stackoverflow, но ничего из этого не работает для меня.

 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 Ответ

0 голосов
/ 16 декабря 2018

Я заметил точно такую ​​же проблему в моем приложении.Эта проблема, по-видимому, вызвана способом создания намерения, поэтому вместо вызова

new Intent(String action);

теперь требуется вызвать

new Intent (String action, 
            Uri uri, 
            Context packageContext, 
            Class<?> cls)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...