1

通知在 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();
                }
            }
4

1 回答 1

0

我在我的应用程序中注意到完全相同的问题。这个问题显然是由构造意图的方式引起的,所以不是调用

new Intent(String action);

现在需要打电话

new Intent (String action, 
            Uri uri, 
            Context packageContext, 
            Class<?> cls)
于 2018-12-16T17:45:45.250 回答