Как добавить действия к кнопке моего уведомления?

android notifications

833 просмотра

2 ответа

Вот мой код для уведомления: -

public void showNotification(String Name, String Rate, int Image_Source, int PandP, int Repeat) {

    RemoteViews remoteview = new RemoteViews(getPackageName(), R.layout.notification_layout);

    PendingIntent pi = PendingIntent.getActivity(this, 0, new Intent(this, SongsListActivity.class), 0);
    notification = new NotificationCompat.Builder(this)
            .setContent(remoteview)
            .setPriority(2)
            .setTicker(NameD.getText())
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle(NameD.getText())
            .setContentText(RateD.getText())
            .setContentIntent(pi)
            .setAutoCancel(false)
            .setCustomBigContentView(remoteview)
            .build();

    notification.bigContentView = remoteview;
    remoteview.setImageViewResource(R.id.Repeat_N, Repeat);
    remoteview.setImageViewResource(R.id.P_and_P_N, PandP);
    remoteview.setTextViewText(R.id.Name_N, Name);
    remoteview.setTextViewText(R.id.Rate_N, Rate);
    remoteview.setImageViewResource(R.id.Image_N, Image_Source);
    notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    notificationManager.notify(111111, notification);
}

вот мой xml уведомления: -

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#2196F3">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:background="#2196F3"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/Image_N"
        android:layout_width="100dp"
        android:layout_height="100dp"
        tools:ignore="ContentDescription" />

    <LinearLayout
        android:id="@+id/text_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:id="@+id/Name_N"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="bottom"
            android:textAppearance="?android:textAppearanceMedium"
            android:textColor="@android:color/white"
            android:textStyle="bold"
            android:maxLength="25"/>

        <TextView
            android:id="@+id/Rate_N"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="top"
            android:textAppearance="?android:textAppearanceMedium"
            android:textColor="#F44336" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1">

            <ImageButton
                android:id="@+id/Repeat_N"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:src="@drawable/ic_repeat_white_48dp"
                android:background="#2196F3"/>

            <ImageButton
                android:id="@+id/Previous_N"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:src="@drawable/ic_skip_previous_white_48dp"
                android:background="#2196F3"/>

            <ImageButton
                android:id="@+id/P_and_P_N"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:src="@drawable/ic_play_arrow_white_48dp"
                android:background="#2196F3"/>

            <ImageButton
                android:id="@+id/Next_N"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:src="@drawable/ic_skip_next_white_48dp"
                android:background="#2196F3"/>


        </LinearLayout>

    </LinearLayout>

</LinearLayout>

Макет моего уведомления

Теперь, как мне добавить действие к 4 кнопкам в уведомлении, чтобы: -

a) кнопка Pause Image приостанавливает медиаплеер MediaPlayer, а затем изменяет его изображение для воспроизведения.

b) следующая и предыдущая кнопки Image вызывают метод mediaplayer (int i)

в) кнопка Image Repet вызывает метод changeRepeat ()

Автор: HARSHIL JAIN Источник Размещён: 08.11.2019 11:09

Ответы (2)


0 плюса

Для добавления слушателя в удаленные представления

remoteViews.setOnClickPendingIntent(R.id.someView, pendingIntent);
Автор: Mehdi Jahed Manesh Размещён: 20.08.2016 10:19

0 плюса

Вы можете сделать это, используя remoteViews.setOnClickPendingIntent(R.id.someView, pendingIntent);в сочетании с BroadCastReceiver и создавая уведомления, как это:

 private void showNotification(){private void showNotification(){
    Intent notificationIntent = new Intent(this, MainActivity.class);
    notificationIntent.addFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);

    PendingIntent pendIntent = PendingIntent.getActivity
            (this, 1, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    // notification's layout
    RemoteViews mRemoteViews = new RemoteViews(getPackageName(), R.layout.custom_notification_small);
    mRemoteViews.setImageViewResource(R.id.notif_icon, R.mipmap.ic_launcher);
    mRemoteViews.setTextViewText(R.id.notif_title, "playMusic");
    mRemoteViews.setTextViewText(R.id.notif_content, "pauseMusic");

    Intent intentPlay = new Intent(this, MyReceiver.class);
    intentPlay.setAction(Constants.PLAY_ACTION);
    PendingIntent pIntentPlay = PendingIntent.getBroadcast
            (this, Constants.PENDING_PLAY_CODE, intentPlay, PendingIntent.FLAG_UPDATE_CURRENT);

    Intent intentPause = new Intent(this, MyReceiver.class);
    intentPause.setAction(Constants.PAUSE_ACTION);
    PendingIntent pIntentPause = PendingIntent.getBroadcast
            (this, Constants.PENDING_PAUSE_CODE, intentPause, PendingIntent.FLAG_UPDATE_CURRENT);

    mRemoteViews.setOnClickPendingIntent(R.id.notif_title, pIntentPlay);
    mRemoteViews.setOnClickPendingIntent(R.id.notif_content, pIntentPause);

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
    mBuilder.setSmallIcon(R.drawable.icon_play)
            .setAutoCancel(false)
            .setOngoing(true)
            .setContentIntent(pendIntent)
            .setContent(mRemoteViews)
            .setTicker("musicStarted");

    startForeground(NOTIFY_ID, mBuilder.build());
}

в методе запуска приемника BroadCast вам необходимо управлять медиаплеером, в моем случае у меня есть служба, связанная с MainActivity, поэтому я подключил основной и широковещательный приемник через интерфейс, когда метод MainActivity вызвал его для управления Service, сервис для своего MediaPlayer

Автор: MirlanMaksv Размещён: 20.08.2016 01:12
Вопросы из категории :
32x32