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

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

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

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

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

нужно чтобы по событию в классе Broadcast Receiver, а точнее в методе onReceive() запустить метод уведомления например такое
Кликните здесь для просмотра всего текста
http://developer.alexanderklimov.ru/android/notification.php
, код которого расположен в MainActivity, но когда делаешь метод Notification статиком появляются проблемы с контекстом или как вообще лучше поступить?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2015, 15:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как вызвать Notification в Broadcast Receiver? (Программирование Android):

Как получить preferences из broadcast reciver? - Программирование Android
Здравствуйте! Активити сохраняет данные в SharedPreferences. Данные нужно получить из класса, наследующего BroadcastReceiver....

Как остановить сервис по нажатию на Notification - Программирование Android
в сервисе создаю сообщение: NotificationCompat.Builder builder = new NotificationCompat.Builder(this); ...

Как убрать маленькую иконку в правом нижнем углу notification? - Программирование Android
Здравствуйте! Как убрать маленькую иконку в правом нижнем углу notification? Добавлено через 13 часов 51 минуту То есть нужно...

Receiver - Программирование Android
Добрый день уважаемые форумчане! Помогите разобраться, на сколько я понял receiver нужен для прослушки широковещателных сообщений, т.е к...

WhatsApp call receiver - Программирование Android
После появления звонков можно ли как определить начало и конец звонка как в gsm?

AlarmManager и Service or Receiver? - Программирование Android
Целый день искал, но нифига не нашел( то что нашел помогло тоолько частично). Суть вот в чем, у меня есть AlarmManeger как уже всем и так...

26
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
06.04.2015, 20:37 #16
Вот
Java
1
context.startService(new Intent(context, NotificationService.class));
1
disx
22 / 22 / 0
Регистрация: 26.02.2014
Сообщений: 552
Записей в блоге: 1
06.04.2015, 20:55  [ТС] #17
Rube, типа все ok, никаких ошибок, но и нотификейшн тоже не вылетает, на моменте где он должен выскочить Log такое пишет:

04-06 17:53:00.094: D/gralloc_goldfish(1733): Emulator without GPU emulation detected.
04-06 17:53:13.155: I/(1733): BabyGPS1, 54,54564 | 54,54245
04-06 17:53:13.254: I/Choreographer(1733): Skipped 58 frames! The application may be doing too much work on its main thread.
0
Hedd
13 / 13 / 2
Регистрация: 21.01.2015
Сообщений: 131
06.04.2015, 20:57 #18
disx, Вынесите его в отдельный поток. Thread, Runnable, Handler и т.п.
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
06.04.2015, 21:12 #19
Это не проекта ошибки, эмулятора. Давай код.
0
disx
22 / 22 / 0
Регистрация: 26.02.2014
Сообщений: 552
Записей в блоге: 1
06.04.2015, 21:32  [ТС] #20
Rube, MainActivity
Кликните здесь для просмотра всего текста
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package com.babygps2;
 
import android.annotation.SuppressLint;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.Color;
import android.location.Location;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
public class MainActivity extends FragmentActivity  {
    
    public static final String APP_PREFERENCES = "myNumber";
    public static final String APP_PREFERENCES_NAME = "Nickname"; // phone
    double Longtitude=0.0, Latitude=0.0;
    //public static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
    android.support.v4.app.DialogFragment dlg1; 
    // number
    Location currentLocation;
    private static final int DIAL = 0;
    SharedPreferences mSettings;
    private TextView text;
    static Button btnmap;
    private static final String TAG = null;
    long SMSlongtitude, SMSlatitude;
    static EditText messageNumber, et;
    String smsText, smsText1, smsText2, mes2;
    private static final int REQUEST = 1;
    //----------------notifica----------------
        private Button callButton;
        private static final int NOTIFY_ID = 0x1001;
        private static NotificationManager mNotifyMgr;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // mNotifyMgr = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        dlg1 = new DialogSet();
 
        et = (EditText) findViewById(R.id.editText1);
        mSettings = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);
        //messageNumber = (EditText) findViewById(R.id.et_number);
//      messageNumber.setOnLongClickListener(new View.OnLongClickListener() {
//
//          @SuppressLint("NewApi") @Override
//          public boolean onLongClick(View v) {
//              // TODO Auto-generated method stub
//              dlg1.show(getSupportFragmentManager(), "dlg1");
//               
//              //showDialog(DIAL);
//              return false;
//          }
//
//      });
        //-----Перенос полученных из SMS координат и запуск GoogleMaps-----------------------
        btnmap = (Button) findViewById(R.id.btn_send);
//      if (mSettings.contains(APP_PREFERENCES_NAME)) {
//          messageNumber
//                  .setText(mSettings.getString(APP_PREFERENCES_NAME, ""));
//      }
        Longtitude=MessageReceiver.Longtitude;
        Latitude=MessageReceiver.Latitude;
        
//      if(Longtitude!=0){
//          Notification();
//      }
        
        btnmap.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
                
                String geoUri = String.format("geo:%s,%s?z=17", Double.toString(Latitude), Double.toString(Longtitude));
                Intent geoMap = new Intent(Intent.ACTION_VIEW, Uri.parse(geoUri));
                startActivity(geoMap);
                
                    
            }
        });
    ReadyMap(Longtitude, Latitude);
    
    
    }// -------------End------onCreate---------------------------
 
    // -------------Метод сообщающий о получении данных из SMS-----
    public static void ReadyMap(double Longtitude, double Latitude) {
        
        if (Longtitude != 0 || Latitude != 0) {
//          smsText1 = String.valueOf(SMSlongtitude);
//          smsText2 = String.valueOf(SMSlatitude);
            btnmap.setBackgroundColor(Color.GREEN);
            
        } else {
 
            btnmap.setBackgroundColor(Color.RED);
        }
    }
 
    
    
    // -------------------END---------Работа со входящими
    // SMS--------------------------------------
 
    // ------------------Диалог ввода/изменения телефонного
    // номера------------------
    
    
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        String strNickName = messageNumber.getText().toString(); // здесь
                                                                    // содержится
                                                                    // текст,
                                                                    // введенный
                                                                    // в
                                                                    // текстовом
                                                                    // поле
        Editor editor = mSettings.edit();
        editor.putString(APP_PREFERENCES_NAME, strNickName);
        editor.commit();
    }
 
    
}

MessageReceiver
Кликните здесь для просмотра всего текста
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package com.babygps2;
 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;
 
public class MessageReceiver extends BroadcastReceiver {
    //public static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
    private static final String APP_REQUEST_CODE = "BabyGPS1";
    private static final String myLogs = null;
    public static double Longtitude=0.0, Latitude=0.0;
    public static String mes;
    @SuppressWarnings("null")
    public void onReceive(Context context, Intent intent) {
    
        Bundle pudsBundle = intent.getExtras();
        Object[] pdus = (Object[]) pudsBundle.get("pdus");
        SmsMessage messages = SmsMessage.createFromPdu((byte[]) pdus[0]);
        
        Log.i(myLogs, messages.getMessageBody());
        
        if (messages.getMessageBody().contains(APP_REQUEST_CODE)) {
            
            abortBroadcast();
            
            context.startService(new Intent(context, NotificationService.class));
 
 
             
            mes = messages.getMessageBody();
            mes=mes.replaceAll(",", ".");
                 String div="|";
                 int divider = mes.indexOf(div);
                 String Lo = mes.substring(10, divider-1);
                 String La = mes.substring(divider+2);
                 
                Longtitude=Double.parseDouble(Lo);
                Latitude=Double.parseDouble(La);
             
                String ms = String.valueOf(Longtitude);
                String ms1 = String.valueOf(Latitude);
                Toast.makeText(context, ms+" "+ms1,
                 Toast.LENGTH_LONG).show();
                 
//               String ms2 = String.valueOf(Latitude);
//               Toast.makeText(context, ms2,
//               Toast.LENGTH_LONG).show();
                
                 MainActivity.ReadyMap(Longtitude, Latitude);
//               if (Longtitude != 0 || Latitude != 0) {
//
//                   
//
//                  //MainActivity.Notification();
////                     Notification notification = null;
////                     notification.defaults = Notification.DEFAULT_SOUND |
////                                Notification.DEFAULT_VIBRATE;
//               
//               }
                 
                 
        }
        
    }
    
    
}

NotificationService
Кликните здесь для просмотра всего текста
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package com.babygps2;
 
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 {
    public NotificationService() {
    }
    
    private static final int NOTIFY_ID = 0;
    private static final String NOTIFICATION_TAG = "Sound";
    private static NotificationManager mNotifyMgr;
    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
        
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return Service.START_STICKY;
    }
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, NotificationService.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);
    
}
//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_holo_dark).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;
//}
}

Manifest
Кликните здесь для просмотра всего текста
XML
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
41
42
43
44
45
46
47
48
49
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.babygps2"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="17"
        android:targetSdkVersion="21" />
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:icon="@drawable/babygps2"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 
        <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>
 
        <service
            android:name=".NotificationService"
            android:enabled="true"
            android:permission="BabyGPS2"
            android:exported="true" >
        </service>
    </application>
 
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
 
</manifest>


новые темы совсем для меня,.. , поизучаю ссылку вашу...
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
06.04.2015, 21:39 #21
Так я не понял, бродкаст когда срабатывает? На СМС или на GPS?
Я с GPS не работал, но не надо ли его тоже permission сделать?
И много лишнего тут, почистить надо было код.
0
disx
22 / 22 / 0
Регистрация: 26.02.2014
Сообщений: 552
Записей в блоге: 1
06.04.2015, 21:55  [ТС] #22
Rube, на SMS срабатывает....
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
07.04.2015, 07:49 #23
Это правильно написано? Можно ли так?
XML
1
2
<action android:name="android.provider.Telephony.SMS_RECEIVED" >
</action>
Это что такое?
XML
1
android:permission="BabyGPS2"
Добавлено через 3 минуты
Вот так
XML
1
2
3
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
...
<service android:name=".NotificationService" />
1
disx
22 / 22 / 0
Регистрация: 26.02.2014
Сообщений: 552
Записей в блоге: 1
07.04.2015, 10:13  [ТС] #24
Rube,
Это что такое?
Код XML
XML
1
2
1
android:permission="BabyGPS2"
вычитал что дает доступ к сервису только моему приложению...

Вот так
сделал,... ничего, только тост мой всплывает что получены данные из смс...

Добавлено через 42 минуты
в MainActivity onClick на кнопку написал так
Java
1
startService(new Intent(MainActivity.this, NotificationService.class));
нажимаю, тоже нет ошибок и нет реакции???

Добавлено через 1 час 9 минут
Все заработало, с помощью сервиса так и не удалось запустить, поэтому сделал так:

в MessageReceiver метод onReceive вставил такой код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
nm = (NotificationManager) context
                            .getSystemService(Context.NOTIFICATION_SERVICE);
                          CharSequence from = "Nithin";
                          CharSequence message = "Crazy About Android...";
                          PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
                            new Intent(), 0);
                          @SuppressWarnings("deprecation")
                        Notification notif = new Notification(R.drawable.hungrycat,
                            "Crazy About Android...", System.currentTimeMillis());
                          notif.setLatestEventInfo(context, from, message, contentIntent);
                          notif.sound = Uri.parse("android.resource:///"+ R.raw.alert);
                          notif.defaults = Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE;
 
                          nm.notify(1, notif);
и все появляется и вибрирует, тока звук не проигрывает, не знаю как правильно файл указать который лежит в res/raw/alert.wav, может если кто в уме помнит подскажите как путь правильно должен выглядеть?
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
07.04.2015, 10:50 #25
Ну в принципе если нотификация используется только при получении смс, то можно и в бродкасте ее и вызывать.
Насчет звука, если не ошибаюсь, в манифесте не нужно ли разрешение делать?
Путь как обычно вроде задается, R.raw.alert.
0
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
07.04.2015, 11:06 #26
Цитата Сообщение от disx Посмотреть сообщение
тока звук не проигрывает, не знаю как правильно файл указать который лежит в res/raw/alert.wav, может если кто в уме помнит подскажите как путь правильно должен выглядеть?
http://stackoverflow.com/a/6409511
1
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
07.04.2015, 11:11 #27
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вот тут подробно
http://developer.alexanderklimov.ru/...tification.php
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2015, 11:11
Привет! Вот еще темы с ответами:

Подружить receiver и service - Программирование Android
вообщем такая ситуация. У меня есть сервис который каждые 10 минут отправляет данные на сервер. Мне нужно сделать так чтоб этот сервис...

Receiver не принимает сообщения - Программирование Android
Привет. Почему-то receiver не принимает системные броадкасты, можешь какая-то ошибка в моей писанине, а ее &quot;замыленым&quot; взглядом не вижу. ...

broadcast reciever - Программирование Android
здравствуйте,возникла интересная ситуация. имею фрагмент, в котором в onresume() регистрируется broadcastreciever, а в onstop() регистрация...

Про Broadcast - Программирование Android
Пишу приложение. Оно должно что-то выполнять по событию Broadcast. Проблема в том, что приложение начинает прослушивать события только...


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

Или воспользуйтесь поиском по форуму:
27
Yandex
Объявления
07.04.2015, 11:11
Ответ Создать тему
Опции темы

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