Как нажать ON на переднем плане службы Notification? - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть уведомление службы переднего плана, и я хочу, чтобы пользователь закрывал приложение и нажимал уведомление, чтобы снова открыть приложение. Я реализовал onclicklistener с методом onClick (), но он ничего не сделал. Если это невозможно, я хочу, чтобы кнопка «Воспроизведение» отображалась в уведомлении, поскольку она отображается только при расширении уведомления.

Вот класс обслуживания:

public class MyForeGroundService extends Service {

public MyForeGroundService() {
}

@Override
public IBinder onBind(Intent intent) {
    // TODO: Return the communication channel to the service.
    throw new UnsupportedOperationException("Not yet implemented");
}

@Override
public void onCreate() {
    super.onCreate();
    Log.d(TAG_FOREGROUND_SERVICE, "My foreground service onCreate().");
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if (intent != null) {
        String action = intent.getAction();

        switch (action) {
            case ACTION_START_FOREGROUND_SERVICE:
                startForegroundService();
                Toast.makeText(getApplicationContext(), "Foreground service is started.", Toast.LENGTH_LONG).show();
                break;
            case ACTION_STOP_FOREGROUND_SERVICE:
                stopForegroundService();
                Toast.makeText(getApplicationContext(), "Foreground service is stopped.", Toast.LENGTH_LONG).show();
                break;
            case ACTION_PLAY:
                Toast.makeText(getApplicationContext(), "You click Play button.", Toast.LENGTH_LONG).show();
                break;
            case ACTION_PAUSE:
                Toast.makeText(getApplicationContext(), "You click Pause button.", Toast.LENGTH_LONG).show();
                break;
        }
    }
    return super.onStartCommand(intent, flags, startId);
}

/* Used to build and start foreground service. */
private void startForegroundService() {
    Log.d(TAG_FOREGROUND_SERVICE, "Start foreground service.");

    // Create notification default intent.
    Intent intent = new Intent();
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

    // Create notification builder.
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this);

    // Make notification show big text.
    NotificationCompat.BigTextStyle bigTextStyle = new NotificationCompat.BigTextStyle();
    bigTextStyle.setBigContentTitle("Music player implemented by foreground service.");
    bigTextStyle.bigText("Android foreground service is a android service which can run in foreground always, it can be controlled by user via notification.");
    // Set big text style.
    builder.setStyle(bigTextStyle);

    builder.setWhen(System.currentTimeMillis());
    builder.setSmallIcon(R.mipmap.ic_launcher);
    Bitmap largeIconBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.strava);
    builder.setLargeIcon(largeIconBitmap);
    // Make the notification max priority.
    builder.setPriority(Notification.PRIORITY_MAX);
    // Make head-up notification.
    builder.setFullScreenIntent(pendingIntent, true);

    // Add Play button intent in notification.
    Intent playIntent = new Intent(this, MyForeGroundService.class);
    playIntent.setAction(ACTION_PLAY);
    PendingIntent pendingPlayIntent = PendingIntent.getService(this, 0, playIntent, 0);
    NotificationCompat.Action playAction = new NotificationCompat.Action(android.R.drawable.ic_media_play, "Play", pendingPlayIntent);
    builder.addAction(playAction);

    // Build the notification.
    Notification notification = builder.build();

    // Start foreground service.
    startForeground(1, notification);
}

private void stopForegroundService() {
    Log.d(TAG_FOREGROUND_SERVICE, "Stop foreground service.");

    // Stop foreground service and remove the notification.
    stopForeground(true);

    // Stop the foreground service.
    stopSelf();
}

}

1 Ответ

0 голосов
/ 06 ноября 2018

Таким образом, чтобы добавить эффект «onClick» к уведомлению, вы должны использовать метод «.setContentIntent (pendingIntent)» в NotificationCompat.Builder.

То, что кнопка воспроизведения всегда видна, немного сложнее из того, что я прочитал, некоторые говорят, что «setPriority (Notification.PRIORITY_MAX) + setWhen (0)» может решить эту проблему, другие говорят, что это зависит от устройства и если у вас есть другие уведомления, вы подключены к USB и т. д., и что для этого не существует единого рабочего решения.

...