Как создать уведомление, когда мое приложение получает широковещательное сообщение - PullRequest
1 голос
/ 10 октября 2019

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

Я пробовал видео на YouTube и StackOverflow, но ничего не нашел.

открытый класс MyReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    Toast.makeText(context, "EBR triggered", Toast.LENGTH_LONG).show();

// Следующий код не работает. Я копирую это из StackOverflow // PendingIntent pendingIntent = PendingIntent.getActivity (context, 1, intent, 0);

    Notification.Builder builder = new Notification.Builder(context);

    builder.setAutoCancel(false);
    builder.setTicker("Ticker text");
    builder.setContentTitle("Content of Notification");
    builder.setContentText("You have a new message");
    builder.setSmallIcon(R.mipmap.ic_launcher);
    builder.setContentIntent(pendingIntent);
    builder.setOngoing(true);
    builder.setSubText("This is subtext...");  
    builder.setNumber(100);
    builder.build();

    // add as notification
    NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    manager.notify(0, builder.build());


}


}

Нет ошибок, и я ожидал, что при получении широковещания появится значок уведомления, ноничего не произошло.

1 Ответ

0 голосов
/ 10 октября 2019

Вот простой пример приема вещания.

Приложение 1 (отправитель)

Intent intent = new Intent("MY_NOTIFICATION");
intent.setComponent(
    new ComponentName("com.example.stackoverflow", "com.example.stackoverflow.MyReceiver")
);
intent.putExtra("data","Notice me senpai!");
sendBroadcast(intent);

Приложение 2 (получатель)

AndroidManifest.xml:

...
<receiver android:name=".MyReceiver">
    <intent-filter>
        <action android:name="MY_NOTIFICATION"/>
    </intent-filter>
</receiver>

MyReceiver.java:

public void onReceive(Context context, Intent intent) {
        String data = intent.getStringExtra("data");
        Toast.makeText(context, data, Toast.LENGTH_LONG).show();

        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
        NotificationChannel channel = new NotificationChannel("CHANNEL_ID", "name", NotificationManager.IMPORTANCE_DEFAULT);
        channel.setDescription("description");
        notificationManager.createNotificationChannel(channel);

        NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "CHANNEL_ID")
                .setSmallIcon(R.drawable.ic_launcher_background)
                .setContentTitle("textTitle")
                .setContentText(data)
                .setPriority(NotificationCompat.PRIORITY_DEFAULT);
        notificationManager.notify(1, builder.build());
    }

Обратите внимание, что существует ограничения Broacast со времен Android 8. Так что вынеобходимо предоставить явный класс для обработки, т.е. setComponent param вместе с действием

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...