Как построить уведомление в Android и реализовать прослушиватель кликов? - PullRequest
0 голосов
/ 24 марта 2019

Привет, друзья! Я создаю приложение для mp3-плеера. Мое приложение успешно создается. Я хочу реализовать уведомление о событии щелчка, когда пользователь переходит в фоновый режим. Они управляют мультимедиа из панели уведомлений. Мое уведомление также успешно создается, но проблема в том, как управлять музыкой и изменять изображение при уведомлении..addaction (), когда пользователь нажимает на паузу, чтобы изменить изображение, чтобы воспроизвести, и когда песня воспроизводится, изображение снова меняется на паузу, и медиаплеер также, и я также хочу получить название песни и исполнителя здесь мой код, который вы можете легко понять!

public void play(int songindex) {
song = songList.get(songindex);

try {

    if (mediaPlayer != null) {
        mediaPlayer.release();
        mediaPlayer = null;
    }
    Uri uri = Uri.parse("file:///" + song.getGetpath());
    mediaPlayer = MediaPlayer.create(mContext, uri);
     title.setText(song.getTitle());
    artist.setText(song.getArtist());

     notificationTitleText=title.getText();
    notificationDescText=artist.getText();
    handler = VisualizerDbmHandler.Factory.newVisualizerHandler(getApplicationContext(), mediaPlayer);
    audioVisualization.linkTo(handler);
    mediaPlayer.start();
    seekBar.setProgress(0);
    seekBar.setMax(100);
    updateProgressBar();

    if (mediaPlayer != null && mediaPlayer.isPlaying()) {
        play.setVisibility(View.GONE);
        pause.setVisibility(View.VISIBLE);
        play_main.setVisibility(View.GONE);
        pause_main.setVisibility(View.VISIBLE);
        Animation aniRotate = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate);
        rotate.startAnimation(aniRotate);

        mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {


                if (checked) {
                    mediaPlayer.setLooping(true);
                    mediaPlayer.start();
                } else if (isShuffle) {
                    // shuffle is on - play a random song
                    Random rand = new Random();
                    currentSongIndex = rand.nextInt((songList.size() - 1) - 0 + 1) + 0;
                    play(currentSongIndex);
                } else {
                    // no repeat or shuffle ON - play next song
                    if (currentSongIndex < (songList.size() - 1)) {
                        play(currentSongIndex + 1);
                        currentSongIndex = currentSongIndex + 1;
                    } else {
                        // play first song
                        play(0);
                        currentSongIndex = 0;
                    }
                }
            }
        });
    }


} catch (Exception e) {

    Toast.makeText(getApplicationContext(), "" + e, Toast.LENGTH_SHORT).show();


}

}

public  void  shownotification(){
    Bitmap largeImage = BitmapFactory.decodeResource(getResources(),R.drawable.dog);




    Notification channel = new NotificationCompat.Builder(getApplicationContext(),CHANNEL_ID_1)
            .setSmallIcon(R.drawable.ic_music)
            .setContentTitle(notificationTitleText
            )
            .setContentText(notificationDescText)
            .setLargeIcon(largeImage)
            .addAction(R.drawable.ic_like,"like",null)
            .addAction(R.drawable.ic_prev,"prev",null)
            .addAction(R.drawable.ic_pause,"pause",null)
            .addAction(R.drawable.ic_next,"next",null)
            .addAction(R.drawable.ic_dislike,"dislike",null)
            .setStyle(new android.support.v4.media.app.NotificationCompat.MediaStyle().
                    setShowActionsInCompactView(1,2,3))
            .build();



    mNotificationManagerCompat.notify(1,channel);

}

Метод gettext () работает нормально, но он работает в первую очередь, когда происходит любое нажатие события, если воспроизведение песни завершено, а следующая песня не получает текстовое значение

Ответы [ 2 ]

0 голосов
/ 24 марта 2019
0 голосов
/ 24 марта 2019

Я предполагаю, что вы играете песни из действия, но это также будет работать для службы.

Включите это в свою деятельность или службу

private final BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if(action.equals("com.mypackage.ACTION_PAUSE_MUSIC")){
            //Do whatever you want. Ex. Pause
        }
        //Similarly this can be done for all actions
    }};

Создайте метод уведомления о шоукак это

public  void  shownotification(){
Bitmap largeImage = BitmapFactory.decodeResource(getResources(),R.drawable.dog);

Intent pauseIntent = new Intent("com.mypackage.ACTION_PAUSE_MUSIC");
PendingIntent pausePendingIntent = PendingIntent.getBroadcast(this, 1, pauseIntent, 0);
// Similarly you can create an intent and pending intent pair for each action you want just change the string in intent constructor

Notification channel = new NotificationCompat.Builder(getApplicationContext(),CHANNEL_ID_1)
        .setSmallIcon(R.drawable.ic_music)
        .setContentTitle(notificationTitleText
        )
        .setContentText(notificationDescText)
        .setLargeIcon(largeImage)
        .addAction(R.drawable.ic_like,"like",null)
        .addAction(R.drawable.ic_prev,"prev",null)
        .addAction(R.drawable.ic_pause,"pause",pausePendingIntent)  //like this attach every action with respective pending intent
        .addAction(R.drawable.ic_next,"next",null)
        .addAction(R.drawable.ic_dislike,"dislike",null)
        .setStyle(new android.support.v4.media.app.NotificationCompat.MediaStyle()
        .setShowActionsInCompactView(1,2,3))
        .build();

mNotificationManagerCompat.notify(1,channel);}
...