Какой «идентификатор канала» я должен передать конструктору NotificationCompat.Builder? - PullRequest
0 голосов
/ 23 октября 2019

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

Я пишу свое приложение шаг за шагом в соответствии с этим руководством.

Я не понимаю, какой каналid Я должен передать конструктору, чтобы приложение работало. Теперь приложение ничего не делает (оно тоже не рушится). Я предполагаю, что проблема в инициализации переменной NotificationCompat.Builder notifyBuilder. Я не знал, что передать, поэтому я просто передал произвольную строку "0".

Мои вопросы: что я должен передать конструктору NotificationCompat.Builder и это заставит приложение работать?

Вот основная активность:

public class MainActivity extends AppCompatActivity {
    private Button mNotifyButton;
    private static final int NOTIFICATION_ID = 0;
    private static final String NOTIFICATION_ID_STRING = "0";
    private NotificationManager mNotifyManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mNotifyButton = (Button) findViewById(R.id.notificationButton);
    }

    public void sendNotification(View view) {

        mNotifyManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        NotificationCompat.Builder notifyBuilder
                =new NotificationCompat.Builder(this, NOTIFICATION_ID_STRING)
                .setContentTitle("You've been notified!")
                .setContentText("This is your notification text.")
                .setSmallIcon(R.drawable.ic_android);
        Notification myNotification = notifyBuilder.build();
        mNotifyManager.notify(NOTIFICATION_ID, myNotification);

    }
}

1 Ответ

1 голос
/ 23 октября 2019
private static final int NOTIFICATION_ID = 0;

Это идентифицирует ваше уведомление. Если вы отправите несколько уведомлений с одним и тем же идентификатором, старое уведомление будет заменено более новым. Итак, если вы хотите отобразить несколько уведомлений одновременно, вам нужно несколько идентификаторов.

private static final String NOTIFICATION_ID_STRING = "0";

Это идентификатор канала. Он сообщает, какой канал следует использовать для отправки этого уведомления. Вы можете назначить любой String. Вам просто нужно убедиться, что вы используете тот же String для определенного канала. А если вы хотите создать больше каналов, вам нужно использовать для них другой String.

О канале

В последних версиях Android (Android Oreo и далее), вы можете иметь разные каналы для отправки уведомлений. Таким образом, вы позволяете своему пользователю настраивать, какое уведомление он хочет получать.

Например, у вас есть приложение для покупок. Тогда у вас может быть несколько каналов, таких как:

  • Мои заказы (для уведомления о заказах)
  • Акции (для уведомлений о рекламных акциях ... этот, вероятно, захочет пользовательотключить).
  • Разное (для любого другого типа уведомлений).

Перед отправкой уведомления по этому каналу, вы должны создать его:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    CharSequence name = "Orders Notification";
    String description = "Notifications about my order";
    int importance = NotificationManager.IMPORTANCE_DEFAULT;

    NotificationChannel channel = new NotificationChannel(NOTIFICATION_ID_STRING, name, importance);
    channel.setDescription(description);

    NotificationManager notificationManager = getSystemService(NotificationManager.class);
    notificationManager.createNotificationChannel(channel);
}

Затем вы можете отправлять уведомления через:

NotificationCompat.Builder notifyBuilder
            = new NotificationCompat.Builder(this, name.toString())

Вы можете проверить все каналы, которые есть в приложении, через:

Settings -> Apps -> App you want to check -> Notifications

Некоторые приложения имеют только один канал. Другие приложения могут иметь более одного канала.

Возвращаясь к вашему вопросу

Итак, возвращаясь к вашему примеру, NOTIFICATION_ID_STRING может быть любой строкой. Вам просто нужно использовать "0" каждый раз, когда вы хотите отправить сообщение по определенному каналу. И, если вы создаете новый канал, используйте новую строку "channel1", например.

Однако вы должны создать канал перед отправкой на него уведомления:

// This ID can be the value you want.
private static final int NOTIFICATION_ID = 0;

// This ID can be the value you want.
private static final String NOTIFICATION_ID_STRING = "My Notifications";

public void sendNotification(View view) {

    mNotifyManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

    //Create the channel. Android will automatically check if the channel already exists
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel channel = new NotificationChannel(NOTIFICATION_ID_STRING, "My Channel Name", NotificationManager.IMPORTANCE_DEFAULT);
        channel.setDescription("My notification channel description");
        mNotifyManager.createNotificationChannel(channel);
    }

    NotificationCompat.Builder notifyBuilder
            = new NotificationCompat.Builder(this, NOTIFICATION_ID_STRING)
            .setContentTitle("You've been notified!")
            .setContentText("This is your notification text.")
            .setSmallIcon(R.drawable.ic_android);
    Notification myNotification = notifyBuilder.build();
    mNotifyManager.notify(NOTIFICATION_ID, myNotification);
}

Выможете найти больше информации о них ЗДЕСЬ

...