Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
disx
20 / 20 / 0
Регистрация: 26.02.2014
Сообщений: 533
Записей в блоге: 1
#1

Как вызвать Notification в Broadcast Receiver? - Программирование Android

06.04.2015, 15:31. Просмотров 1566. Ответов 26
Метки нет (Все метки)

нужно чтобы по событию в классе Broadcast Receiver, а точнее в методе onReceive() запустить метод уведомления например такое
Кликните здесь для просмотра всего текста
http://developer.alexanderklimov.ru/android/notification.php
, код которого расположен в MainActivity, но когда делаешь метод Notification статиком появляются проблемы с контекстом или как вообще лучше поступить?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Hedd
13 / 13 / 2
Регистрация: 21.01.2015
Сообщений: 131
06.04.2015, 15:48     Как вызвать Notification в Broadcast Receiver? #2
disx, что за проблемы у вас появляются? Текст ошибки?
disx
20 / 20 / 0
Регистрация: 26.02.2014
Сообщений: 533
Записей в блоге: 1
06.04.2015, 16:45  [ТС]     Как вызвать Notification в Broadcast Receiver? #3
Hedd, в методе onReceive() пишу так:
Java
1
2
3
 if (Значение !=0) {
                    MainActivity.Notification();
                 }
в мэйне такой код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void Notification(){
        int icon = R.drawable.ic_launcher;
        CharSequence tickerText = "Hello!";
        long when = System.currentTimeMillis();
        Context context = [B]getApplicationContext();[/B]  //это подчеркнуто и "Cannot make a static reference to the non-static method getApplicationContext() from the type ContextWrapper"
        CharSequence contentTitle = "Notification";
        CharSequence contentText = "Hi, I am Android!";
    
        Intent notificationIntent = new Intent(this/*тоже "Cannot use this in a static context"*/, MainActivity.class);
        PendingIntent contentIntent = PendingIntent.getActivity(this/*тоже "Cannot use this in a static context"*/, 0, notificationIntent, 0);
            
        Notification notification = new Notification(icon, tickerText, when);
        notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
            
        mNotifyMgr.notify(NOTIFY_ID, notification);
    }
см. каменты, .... ?

Добавлено через 9 минут
попробовал вкинуть в if такое:
Java
1
2
3
Notification notification = null;
                     notification.defaults = Notification.DEFAULT_SOUND |
                                Notification.DEFAULT_VIBRATE;
посыпалось мол: ругается на это
notification.defaults = Notification.DEFAULT_SOUND |
, с ошибкой
java.lang.RuntimeException: Unable to start receiver com.babygps2.MessageReceiver: java.lang.NullPointerException
Hedd
13 / 13 / 2
Регистрация: 21.01.2015
Сообщений: 131
06.04.2015, 16:47     Как вызвать Notification в Broadcast Receiver? #4
disx, ну для начала не надо писать !=0 :
Java
1
if (abc != null) {}
Далее: все this, на которые ругается, заменить на MainActivity.this (ну или что там у вас за название у мейн класса).
disx
20 / 20 / 0
Регистрация: 26.02.2014
Сообщений: 533
Записей в блоге: 1
06.04.2015, 16:54  [ТС]     Как вызвать Notification в Broadcast Receiver? #5
Hedd,
ну для начала не надо писать !=0
если не писать подчеркивает "The operator != is undefined for the argument type(s) double, null"

заменить на MainActivity.this
заменил подчеркивает "Cannot use this in a static context"
dambroz
1 / 1 / 1
Регистрация: 31.03.2013
Сообщений: 23
06.04.2015, 17:03     Как вызвать Notification в Broadcast Receiver? #6
disx, а почему бы вам создание оповещения не вынести в отдельный класс:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public class MyNotification {
    private static final String NOTIFICATION_TAG = "Sound";
    
    public void notify(final Context context, final String title, String text) {
 
        Intent intent = new Intent(context, MainActivity.class);
        Notification notification = new Notification.Builder(context).setContentTitle(title).setContentText(text)
                .setSmallIcon(R.drawable.abc_ab_share_pack_mtrl_alpha).build();
        notification.flags |= Notification.FLAG_AUTO_CANCEL;
        notification.defaults |= Notification.DEFAULT_VIBRATE;
        notification.defaults |= Notification.DEFAULT_LIGHTS;
 
        notify(context, notification);
    }
 
    @TargetApi(Build.VERSION_CODES.ECLAIR)
    private void notify(final Context context, final Notification notification) {
        final NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) {
            nm.notify(NOTIFICATION_TAG, 0, notification);
        } else {
            nm.notify(NOTIFICATION_TAG.hashCode(), notification);
        }
    }
 
    /**
     * Cancels any notifications of this type previously shown using
     * {@link #notify(Context, String, int)}.
     */
    @TargetApi(Build.VERSION_CODES.ECLAIR)
    public boolean cancel(final Context context) {
        final NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) {
            nm.cancel(NOTIFICATION_TAG, 0);
        } else {
            nm.cancel(NOTIFICATION_TAG.hashCode());
        }
        return true;
    }
}


А в onReceive делать
Java
1
new MyNotification().notify(context,"text","text1")
GerNik
4 / 4 / 2
Регистрация: 03.02.2013
Сообщений: 31
06.04.2015, 17:35     Как вызвать Notification в Broadcast Receiver? #7
Насколько я знаю, в Broadcast Receiver'e вызывать notification нельзя. В Broadcast Receiver'e надо вызвать service, а уже в service вызвать notification.
disx
20 / 20 / 0
Регистрация: 26.02.2014
Сообщений: 533
Записей в блоге: 1
06.04.2015, 17:55  [ТС]     Как вызвать Notification в Broadcast Receiver? #8
dambroz, попробовал так, ошибок нет, но ничего не происходит при реакции ресивера...

GerNik,
надо вызвать service
интересно, но как это делается?
dambroz
1 / 1 / 1
Регистрация: 31.03.2013
Сообщений: 23
06.04.2015, 18:18     Как вызвать Notification в Broadcast Receiver? #9
GerNik, почему нельзя? можно поподробнее?

disx, попробуйте создать notification при помощи NotificationCompat.Builder
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
06.04.2015, 18:21     Как вызвать Notification в Broadcast Receiver? #10
Создайте класс NotificationService:
public class NotificationService extends Service
В методе onStartCommand создайте уведомление.
В BroadcastReceiver запускайте сервис.
Не забудьте зарегистрировать бродкаст в манифесте.
disx
20 / 20 / 0
Регистрация: 26.02.2014
Сообщений: 533
Записей в блоге: 1
06.04.2015, 18:52  [ТС]     Как вызвать Notification в Broadcast Receiver? #11
Rube, сделал как-то так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
 
public class NotificationService extends Service {
    private static final int NOTIFY_ID = 0;
    private static NotificationManager mNotifyMgr;
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
public void onStartCommand(){
    int icon = R.drawable.ic_launcher;
  CharSequence tickerText = "Hello!";
  long when = System.currentTimeMillis();
  Context context = getApplicationContext();  
  CharSequence contentTitle = "Notification";
  CharSequence contentText = "Hi, I am Android!";
 
  Intent notificationIntent = new Intent(this, MainActivity.class);
  PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
      
  Notification notification = new Notification(icon, tickerText, when);
  notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
      
  mNotifyMgr.notify(NOTIFY_ID, notification);
}
}
в манифесте так:
XML
1
2
3
4
5
6
7
8
9
<receiver
            android:name=".MessageReceiver"
            android:enabled="true"
            android:exported="true" >
            <intent-filter android:priority="999" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" >
                </action>
            </intent-filter>
</receiver>
сам сервис не надо в манифесте регистрировать?

если все правильно, то как етот сервис запускать в BroadcastReceiver?
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
06.04.2015, 19:23     Как вызвать Notification в Broadcast Receiver? #12
Цитата Сообщение от disx Посмотреть сообщение
сам сервис не надо в манифесте регистрировать?
Надо
Java
1
<service android:name=".NotificationService"></service>
Цитата Сообщение от disx Посмотреть сообщение
то как етот сервис запускать в BroadcastReceiver?
Java
1
startService(new Intent(this, NotificationService.class));
Добавлено через 1 минуту
Вот тут про сервисы
disx
20 / 20 / 0
Регистрация: 26.02.2014
Сообщений: 533
Записей в блоге: 1
06.04.2015, 19:34  [ТС]     Как вызвать Notification в Broadcast Receiver? #13
Rube,
Java
1
startService(new Intent(this, NotificationService.class));
на это пишет
The constructor Intent(MessageReceiver, Class<NotificationService>) is undefined
?
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
06.04.2015, 20:21     Как вызвать Notification в Broadcast Receiver? #14
MessageReceiver.this
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2015, 20:27     Как вызвать Notification в Broadcast Receiver?
Еще ссылки по теме:
Android Подружить receiver и service
broadcast reciever Android
Android Про Broadcast
Android Динамический Receiver в Service перестаёт принимать сообщения
Service fragment broadcast Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
disx
20 / 20 / 0
Регистрация: 26.02.2014
Сообщений: 533
Записей в блоге: 1
06.04.2015, 20:27  [ТС]     Как вызвать Notification в Broadcast Receiver? #15
Rube,
Java
1
startService(new Intent(MessageReceiver.this, NotificationService.class));
The constructor Intent(MessageReceiver, Class<NotificationService>) is undefined
?
Yandex
Объявления
06.04.2015, 20:27     Как вызвать Notification в Broadcast Receiver?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru