Android показывает уведомление от BroadcastReceiver - PullRequest
6 голосов
/ 24 октября 2011

У меня есть класс, расширяющий BroadcastReceiver, который вызывается при появлении новых результатов сканирования Wifi (получатель регистрируется в манифесте с трансляцией Scan_Results в качестве фильтра намерений).

Из этого класса я хочу показать пользователю уведомление. В настоящее время я передаю контекст, полученный в качестве параметра в методе onReceive моего класса широковещательных намерений, в метод «showtification» другого класса.

Когда доходит до линии:

myNotificationManager.notify(notificationId, notification);

происходит сбой со следующим исключением:

java.lang.IllegalArgumentException: contentView required: pkg=com.mumfordmedia.trackify id=2131034122 notification=Notification(vibrate=null,sound=null,defaults=0x0,flags=0x0)

Есть идеи, почему это происходит? Все, о чем я могу думать, - это то, что контекст, который я получаю из параметра onReceive, не ... из-за отсутствия лучшей фразы "право на работу" ...

Есть идеи? Спасибо, Макс.

Ответы [ 6 ]

14 голосов
/ 01 августа 2012

ContentView - это представление, которое требуется при нажатии на уведомление. Код ниже работает нормально и setLatestEventInfo() является обязательным методом.

NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    Notification notification = new Notification(R.drawable.ic_launcher,
            "Hello from service", System.currentTimeMillis());
    Intent intent = new Intent(this, MainActivity.class);
    notification.setLatestEventInfo(this, "contentTitle", "contentText",
            PendingIntent.getActivity(this, 1, intent, 0));
    manager.notify(111, notification);
2 голосов
/ 28 октября 2011

Вы должны вызвать Notification.setLatestEventInfo ().

2 голосов
/ 25 октября 2011

Не знаю точно, почему он не работал раньше, но вот код, с которым я его получил:

Объявите следующее вне любого метода:

int YOURAPP_NOTIFICATION_ID = 1234567890;
NotificationManager mNotificationManager;

Затем в методе onReceiveвызовите следующее:

mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
showNotification(context, R.drawable.icon, "short", false);

Затем объявите следующий метод:

private void showNotification(Context context, int statusBarIconID, String string, boolean showIconOnly) {
        // This is who should be launched if the user selects our notification.
        Intent contentIntent = new Intent();

        // choose the ticker text
        String tickerText = "ticket text";

        Notification n = new Notification(R.drawable.icon, "ticker text", System.currentTimeMillis());

        PendingIntent appIntent = PendingIntent.getActivity(context, 0, contentIntent, 0);

        n.setLatestEventInfo(context, "1", "2", appIntent);

        mNotificationManager.notify(YOURAPP_NOTIFICATION_ID, n);
    }
1 голос
/ 06 июня 2012

Используйте этот код вместе с вашим уведомлением

Intent intent = new Intent(this, MusicDroid.class);
PendingIntent activity = PendingIntent.getActivity(this, 0, intent, 0);
notification.setLatestEventInfo(this, "This is the title", 
    "This is the text", activity);
notification.number += 1;

nm.notify(NOTIFY_ID, notification);
0 голосов
/ 18 сентября 2013

Для тех, кто использует NotificationCompat, будет работать следующий код:

NotificationCompat.Builder n = new NotificationCompat.Builder(this)
    .setSmallIcon(R.drawable.icon).setContentText("Notify Title").setContentText("Sample Text");
    NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
    Intent i = new Intent(this,MainActivity.class);
    PendingIntent ac = PendingIntent.getActivity(this, 0, i, 0);
    n.setContentIntent(ac);
    nm.notify(12222, n.build());
0 голосов
/ 24 октября 2011

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

...