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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 129
#1

Приём сообщений от сервера в фоне - Программирование Android

09.09.2016, 07:06. Просмотров 2219. Ответов 59
Метки нет (Все метки)

Привет, нужна помощь в структуре.
Первый раз работаю с подключением.
В общем к делу:
1.Отправляю запрос на сервер
2.У меня есть tabhost, инициализирую его с двумя классами, диалоги, и звонки.
3. Сейчас после запроса мне приходит ответ в виде Json строки, распарспарсиваю и заполняю как на скрине.

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

Как только прийдет сообщение мне нужно сразу обновить.

Я использую обычный Thread , AsyncTask не подходит так как он же выполняется один раз.

А мне нужно слушать на протяжение всей жизни приложения. Все бы нечего, но на слабых одноядерных с оперативой 512 жутко тормозит.

Обращаюсь сюда потому что нужен совет людей по опытней.

Так же я понял что нужно скорее всего использовать подключение в Service, и выводить уведомления с помощью Reciver. Но не знаю как применить это к моему коду.

Буду очень благодарен за помощь.
0
Миниатюры
Приём сообщений от сервера в фоне  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2016, 07:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Приём сообщений от сервера в фоне (Программирование Android):

Получение сообщений от сервера без запроса - Программирование Android
Среди существующих тем не нашёл ответа на свой вопрос, поэтому решил задать сам. Попытаюсь объяснить, что я имел в виду. Пишу...

Приём СМС - Программирование Android
Здравствуйте! Уже не первый день пытаюсь прочитать своим приложением входящее сообщение, но безрезультатно. На гаджете вообще программа...

Приём данных по Bluetooth - Программирование Android
Из Arduino посылается строка xx|xx|xx|xx|xx,xxxx|\n, где х-любое число. На андроиде получаю: х| x| x| x| итд. Подскажи как...

Приём текста по Bluetooth. Ошибки в символах - Программирование Android
Добрый день. Прошу особо не пинать. Вопрос чисто технический. Второй день ищу по поисковикам, заметил что не я один сталкивался с...

Приём сообщений методом POST - PHP
Некоторый клиент должен присылать PHP скрипту бинарный файл. Для этого он присылает http сообщение с методом POST, то есть когда в теле...

Приём сообщений без перезагрузки страницы - jQuery
Делаю чат, расскажите о http://jsfiddle.net/bv5Kq/13 Как мне реализовать это? Лист сообщений выглядит по типу <div...

59
REALIST07
Автор FAQ
Автор FAQ
176 / 176 / 13
Регистрация: 11.06.2010
Сообщений: 934
15.09.2016, 15:06 #31
TonyBicbaev, у меня все это сделано уже год как и все работает, я опишу процесс работы:
1) При первом запуске появляется окно регистрации, лично мне нужно только nickname, который человек введет вручную и его номер телефона зарегистрированный(использую Fabric), пара login/password генерируется так:
Java
1
2
3
4
public static String generateUUID() {
        UUID uuid = UUID.randomUUID();
        return uuid.toString().replace("-", "");
    }
2) Стартуется сервис,а временную пару login/password можно передавать либо в класс App либо в Intente в сервис сразу, пошел коннект;
3) Если ответа нет,то пытается зарегистрироваться;
4) после регистрации пара login/password записывается в файл, откуда и будет браться в дальнейшем и окно регистрации не будет показываться при наличие файла с учеткой;
5) Дальше опять запрос на соединение, если все ок,то стартуем сервис и ставим прослушки и т.д., если нет выводим окно с ошибкой для обращения в техподдрежку
6) Когда ты стартанул сервис,он будет работать до тех пор, пока его не прибьют, это может сделать вручную пользователь, либо система при нехватке памяти,например,но если ты не хочешь, чтобы связь потерялась,то ты должен продумать логику переподключения,для этого делаешь в сервисе так:
Java
1
2
3
4
5
6
@Override
    public void onTaskRemoved(Intent rootIntent) {
        super.onTaskRemoved(rootIntent);
        
        // restart connection logic
    }
7) Если у тебя сервер свой,то тебе нужно слушателей создать самостоятельно, как это сделать? лично я бы сделал Handler, который вызывает себя с какой-то периодичностью( например, 15 сек) и этот handler проверяет соединение с сервером (аля ping)
8) Также можно повесить onBootReceiver,но с ним нужно быть осторожным, лучше не давать ему запускать activity,это приведет к сносу приложения пользователем, лучше пусть сервис стартует (он должен быть отключаемым в настройках и обязательно должна быть кнопка выйти, которая останавливает сервис!)

Добавлено через 11 минут
По поводу уведомлений:
В моей моедли работа с уведомлениями очень проста, если у тебя есть id сообщений уникальный, вот сам класс для работы с уведомлениями:
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
public class NotificationUtils {
    private static NotificationUtils instance;
 
    public static synchronized NotificationUtils getInstance(Context context)
    {
        if (instance == null)
            instance = new NotificationUtils(context);
        return instance;
    }
 
 
    private NotificationManager manager;
    private Context context;
    private NotificationUtils(Context context) {
        manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        this.context = context;
    }
 
 
 
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    public void sendNotification(ChatMessage message) {
 
        //boolean success = false;
        try
        {
            Thread.sleep(1000);
            int notifyId = (int) message.getId();
            Intent intent = new Intent(context, ChatActivity.class);
            intent.putExtra(Utils.ACTIVITY_PARAM_ID, message.getId());
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0 /* Request code */, intent,
                    PendingIntent.FLAG_ONE_SHOT);
 
            Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            Notification.Builder notificationBuilder = new Notification.Builder(context)
                    .setSmallIcon(R.drawable.notification)
                    .setLargeIcon(BitmapFactory.decodeResource(context.getResources(),R.mipmap.notification))
                    .setAutoCancel(true)
                    .setTicker(Utils.deleteCommandTags(message.getMessage()))
                    .setContentText(Utils.deleteCommandTags(message.getMessage()))
                    .setContentIntent(PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT))
                    .setWhen(System.currentTimeMillis())
                    .setContentTitle(Utils.getRoomName(message.getId()))
                    .setDefaults(Notification.DEFAULT_ALL);
            manager.notify(notifyId, notificationBuilder.build());
           /* if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN &&
                message.getContentPath() != null) {
                Bitmap bmp = ((App)context).getNotifIcon(message.getContentPath());
                Notification notification =
                        new Notification.BigPictureStyle(notificationBuilder)
                        .bigPicture(bmp).build();
                manager.notify(notifyId,notification);
                success = true;
            }*/
 
        } catch (InterruptedException e) {
            e.printStackTrace();
        } /*catch (ExecutionException e) {
            e.printStackTrace();
        }
        finally {
            if (!success)
            manager.notify(notifyId, notificationBuilder.build());
        }*/
    }
 
    public void deleteNotification(Context context,int notifyId) {
      manager.cancel(notifyId);
    }
 
}
В классе App 2 метода:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private static NotificationUtils notificationUtils;
 @Override
    public void onCreate() {
        super.onCreate();
notificationUtils = NotificationUtils.getInstance(this);
   ...
}
 
public static void sendNotification(ChatMessage message) {
notificationUtils.sendNotification(chatMessage);
}
 
 public static void deleteNotification(long id) {
        notificationUtils.deleteNotification(getAppContext(), (int) id);
    }
Прикол такого подхода в том, что у тебя будет везде доступ к 1 единственному экземпляру БД,уведомлений и прочего в классе App и тебе не нужно думать и гадать об утечке памяти и куче ненужных экземпляров твоих классов, все в одном месте в одно время!

Добавлено через 8 минут
В 6 пункте забыл сказать, что сервис перезапустить нужно
Java
1
2
3
4
5
6
@Override
* * public void onTaskRemoved(Intent rootIntent) {
* * * * super.onTaskRemoved(rootIntent);
 
     // restart service !!!
* * }
2
Alexvp
108 / 72 / 8
Регистрация: 03.08.2014
Сообщений: 348
15.09.2016, 15:48 #32
vxg, Я свою точку зрения никому не навязываю
Каждый выбирает сам как ему делать.
Хоть скайп не мессенджер, я их не писал. Но делал достаточно много приложений, работающих по принципу "клиент-сервер". И во всех исходил из принципа - сервер пассивный участник, он должен отвечать на запросы.
В великолепном пояснении REALIST07 приведена реальная цифра - запросы каждые 15 секунд. Проверка соединения с сервером вполне может быть запросом на сервер.
0
xaat
43 / 16 / 6
Регистрация: 05.12.2015
Сообщений: 65
15.09.2016, 16:28 #33
Цитата Сообщение от REALIST07 Посмотреть сообщение
xaat,
1) чтобы использовать технологию gsm нужен сервер ( свой собственный), который будет регистрировать устройства в системе и выдавать каждому устройству ключи, у меня где-то был набор php - скриптов с этой темой,но там все вручную вбивается
2) Посмотри внимательно gcm sdk для android, когда я его видел в последний раз там было несколько сервисов, а не один, как в моем случае
Ну понятно что сервер нужен, что б php скрипты работали, откуда то нужно сообщения слать. Я сделал пяток приложений с использованием GCM. Для отправки сообщений с сервера через http нужен простенький php скрипт. А вот для приема сообщений upstream т.е. шлем с девайса на сервер сложнее, это делается через XMPP, и реализация сервера уже не так просто.
Кстати GCM позволяет групповые рассылки слать.
1. Про регистрацию, в простом случае при получении токена GCM мобильное приложение отправляет его простым POST запросом, вместе с логином паролем+ что то там еще, в моем случае это код SMS, привязываете токен к пользователю, сохраняете в базе и спокойно шлете сообщения. В более сложном я регистрировал клиента через сообщение GCM от девайса на сервер, дальше аналогично.
2. Не понял вопроса/замечания вроде там ничего нет больше, это функционал Play Service
0
REALIST07
Автор FAQ
Автор FAQ
176 / 176 / 13
Регистрация: 11.06.2010
Сообщений: 934
15.09.2016, 17:33 #34
xaat, а можно просто поставить готовый типа Openfire и не парить себе мозг gcm
1) это понятно, это усложнаяет логику, все равно пилить сервер придется или брать готовый
2) а ты поставь их приложение и посмотри сколько ресурсов оно потребляет на пару с Play services, который некоторым вообще не нужен ( на кастомных прошивках многих отсутствуют они)
0
xaat
43 / 16 / 6
Регистрация: 05.12.2015
Сообщений: 65
15.09.2016, 18:41 #35
Цитата Сообщение от REALIST07 Посмотреть сообщение
xaat, а можно просто поставить готовый типа Openfire и не парить себе мозг gcm
1) это понятно, это усложнаяет логику, все равно пилить сервер придется или брать готовый
Для отправки сообщений достаточно 10 строчек php, без всякого сервера, для приема на девайсе немногим больше.
2) а ты поставь их приложение и посмотри сколько ресурсов оно потребляет на пару с Play services, который некоторым вообще не нужен ( на кастомных прошивках многих отсутствуют они)
Без Play Services давно уже не встречал девайсов, очень уж многое на них завязано. Для эксперимента можно удалить.
По ресурсам смотрел ничего оно не потребляет, можешь вообще прибить приложение, сообщения все равно доходят, можешь устройство отключить, включишь, они прийдут. В этом то и смысл что соединение GCM устройство и так поддерживает и данные от разных приложений по одному соединению передаются, вот представь что у нас десяток приложение типа того что в этой теме, молотят в цикле запросы на свои сервера, android ведь может и прибить ваши сервисы, аможет и пользователь прибить, что тогда через alarm поднимать?
0
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 129
16.09.2016, 06:24  [ТС] #36
REALIST07, Сервер не мой. и дел к сожалению с ним не имею. Доступа к нему нет работаю с чем дали.
1. Логику вашу уловил. Но просто тупо нехватает опыта такое написать, не понимаю! android разработкой 3 месяца занимаюсь.
2. Сервис использовать в первые буду.
3. Есть много нюансов которые мне не понятны.
3.1. Когда запускать сервис? в Аpp или в активити стартовой. В каждой активити или только раз его запускать?
3.2. Как и где обрабатывать полученные сообщения с сервиса, я так понял в сервисе подключение делать?
3.3. Передавать их с помощью Intenta?
Вообщем мне как новичку сложнаа.
По логики я должен сохранять все полученные данные, и потом сверять?

Добавлено через 1 час 1 минуту
REALIST07, Нужен пример короче) как отправить запрос с активити, и заполнить полученный ответ))
0
xaat
43 / 16 / 6
Регистрация: 05.12.2015
Сообщений: 65
16.09.2016, 07:29 #37
3.1. Когда запускать сервис? в Аpp или в активити стартовой. В каждой активити или только раз его запускать?
В каждой проверяй запущен или нет, если не запущен запускай.
3.2. Как и где обрабатывать полученные сообщения с сервиса, я так понял в сервисе подключение делать?
Подключаешься в сервисе. Обрабатываешь в сервисе... что там у тебя, в базу данных сохранить?
Цитата Сообщение от TonyBicbaev Посмотреть сообщение
3.3. Передавать их с помощью Intenta?
Куда передавать, в активити? local broadcast используй.
0
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 129
16.09.2016, 12:46  [ТС] #38
xaat,
а запрос, с помощью Intenta передавать же? putExtra?
JSON строка. как лучше эти данные заполнить? сразу в ArrayList распихать ? например мне приходит 20 объектов в строке.
JSON
1
2
строка в виде:
09-15 09:09:30.033 3451-3517/com.chat.chat_v100 E/m: m ={"type":"Connection","body":{"Type":"on","GroupID":null,"userT":"user","Id":41726,"chat":{"Id":41726,"Fio":"Усольцева Вера Витальевна (v_surkov@meshalkin.ru)","Email":"Гостиница ФГБУ ННИИПК Е.Н. Мешалкина","Phone":"","Readlytime":null,"LastMessage":null,"Site":null,"Status":null,"IP":"::1","Region":"::1","HomeTown":"::1","new_count_mes":null,"status_of_chat":null}}}[/quote]
В ocCreate проверять или onStart?
Цитата Сообщение от xaat Посмотреть сообщение
В каждой проверяй запущен или нет, если не запущен запускай.
Добавлено через 3 минуты
xaat, и еще, как сервис c App классом взаимодействовать будет?

Добавлено через 18 минут
REALIST07, и как хранения логина пароля пойдет SharedPreferences?

Добавлено через 2 часа 57 минут
REALIST07, кажется дошло, нужно все пропускать через App, типо как обертка?
0
REALIST07
Автор FAQ
Автор FAQ
176 / 176 / 13
Регистрация: 11.06.2010
Сообщений: 934
16.09.2016, 15:33 #39
TonyBicbaev, про обертку все правильно
3.1 я запускаю в mainUI,при первой регистрации в LoginAvtivity,но потом уже не трогаю в MainUI
3.2 получаешь данные в сервисе, закидываешь в App обрабатываешь там и уже с помощью broadcastreceiver обновляешь нужные тебе activity
3.3 записываешь в sharedprefs , считываешь в App классе, а в сервисе берешь из App класса, к App классу можно обратиться везде где есть Context

Добавлено через 7 минут
Еще момент, в App классе можно хранить статическую ссылку на context если нужно и обращаться к нему из любого класса
Java
1
2
3
4
5
6
7
8
9
private static Context context;
    public static Context getAppContext() {
        return App.context;
    }
 
 @Override
    public void onCreate() {
        super.onCreate();
        App.context = getApplicationContext();
Вызываешь App.getAppContext(), в активити так не делают
0
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 129
19.09.2016, 09:39  [ТС] #40
REALIST07,
В общем вопрос)
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
136
137
138
139
140
141
142
143
public class MyService extends Service implements Handler.Callback {
    private WebSocketClient mWebSocketClient;
    private static Handler mHandler;
    private static final String SERVER = ""; //типо адресс
    final String LOG_TAG = "myLogs";
   // ExecutorService es;
 
    public void onCreate() {
        super.onCreate();
        Log.d(LOG_TAG, "MyService onCreate");
     //   es = Executors.newFixedThreadPool(2);
        HandlerThread mThread = new HandlerThread("ServiceThread",
                Process.THREAD_PRIORITY_BACKGROUND);
        mThread.start();
        mHandler = new Handler(mThread.getLooper(), this);
    }
 
    public void onDestroy() {
        super.onDestroy();
        Log.d(LOG_TAG, "MyService onDestroy");
    }
 
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(LOG_TAG, "MyService onStartCommand");
        int method = 0;
        if (intent != null) {
            method = intent.getIntExtra("KEY_METHOD", 0);
        }
 
         mHandler.sendMessage(mHandler.obtainMessage(method, intent));
    //    int time = intent.getIntExtra(MainActivity.PARAM_TIME, 1);
     //   int task = intent.getIntExtra(MainActivity.PARAM_TASK, 0);
 
      //  MyRun mr = new MyRun(startId, time, task);
     //   es.execute(mr);
        connectWebSocket();
        return super.onStartCommand(intent, flags, startId);
    }
 
    public IBinder onBind(Intent arg0) {
        return null;
    }
    public void connectWebSocket() { /*метод подключения*/
 
        URI uri;
        try {
            uri = new URI(SERVER );   //сервер
        } catch (URISyntaxException e) {
            e.printStackTrace();
            return;
        }
 
        mWebSocketClient = new WebSocketClient(uri,new Draft_17()) {
            @Override
            public void onOpen(ServerHandshake serverHandshake) {
                Log.i("Websocket", "Opened");
                mWebSocketClient.send("1.1.3#Логин;Пароль|"); //отпровляем команнду
 
              //  Log.i("e", "e" + s);
 
            }
 
            @Override
            public void onMessage(String s) { //получаем сообщение с сервера
                final String message = s;
                Log.e("m", "m =" + message);
               // treatmentMesage(message); //метод обработки сообщения
 
 
            }
 
            @Override
            public void onClose(int i, String s, boolean b) { //если потереннос соединеие
                Log.i("Websocket", "Closed " + s);
                if(!s.equals("null"))
                {
 
                }
 
                //  setQ(9);
 
            }
 
            @Override
            public void onError(Exception e) { //ошибка соединения
                Log.i("Websocket", "Error " + e.getMessage());
 
 
            }
        };
 
        mWebSocketClient.connect(); //создать подключение
 
 
 
    }
 
    @Override
    public boolean handleMessage(android.os.Message msg) {
        int method = msg.what;
        Log.e("int","int =" + method);
        try {
            switch (method) {
 
                case 0: {
                    // String username ="";
                    //  Intent intent = (Intent) msg.obj;
                    // username = intent.getStringExtra("key1");
                    Log.e("e11","e11");
                    App.sendLocalBroadcastMessage("KEY_METHOD", "KEY_METHOD");
                   /* mHandler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            while (true) {
 
                            }
                        }
                    }, 5000);*/
 
                }
 
                case 1: {
 
 
                    // App.sendLocalBroadcastMessage("Операция2", result);
                    break;
                }
 
 
                default:
 
                    break;
            }
 
 
 
 
        } catch (Exception e)
        {
 
        }
        return false;
    }
ок да запускаю, соединение есть. сообщения приходят, но в слушатель обратно не приходит.
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
public class App extends Application {
    private static Context context;
    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
        Log.e("e14","e14");
        //startService(new Intent(this, XmppService.class));
    }
 
    public static boolean sendLocalBroadcastMessage(String action,String result) {
        Intent sendIntent = new Intent(action);
        sendIntent.putExtra("KEY_METHOD",result);
        Log.e("e15","e15");
        return LocalBroadcastManager.getInstance(context).sendBroadcast(sendIntent);
    }
    public static void setListeners(final Context context) {
        Intent intent = getServiceIntent(context);
        context.startService(intent);
 
    }
 
    public static Intent getServiceIntent(final Context context) {
        return new Intent(context, XmppService.class);
    }
}
и маин
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  String MAIN_ACTIVIVTY = "KEY_METHOD";
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
      //  app = (App) getApplication();
      //    app.startService(new Intent(this, XmppService.class));
        context = getApplicationContext();
 
       // App.setListeners(context);
        startService(new Intent(this,MyService.class).putExtra("KEY_METHOD",0));
        IntentFilter in = new IntentFilter(MAIN_ACTIVIVTY);
        LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                int task = intent.getIntExtra("KEY_METHOD", 0);
            Log.e("e","e"); // по сути должен был вывести в логах "e" 
            }
        },in);
не заходит в слушатель. в чем ошибка?
ну то есть вот этот кусок кода уже не обрабатывает.
Java
1
2
3
4
5
6
7
  LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                int task = intent.getIntExtra("KEY_METHOD", 0);
            Log.e("e","e"); // по сути должен был вывести в логах "e", нечего не выводит.
            }
        },in);
Добавлено через 4 часа 4 минуты
И так тоже нечего не происходит
Java
1
  App.setListeners(context);
0
REALIST07
Автор FAQ
Автор FAQ
176 / 176 / 13
Регистрация: 11.06.2010
Сообщений: 934
19.09.2016, 15:09 #41
Цитата Сообщение от TonyBicbaev Посмотреть сообщение
App.sendLocalBroadcastMessage("KEY_METHOD", "KEY_METHOD");
В action правильнее передавать такую строку: допустим пакет называется test.ru, а я хочу провести обновление основного activity, вызов будет таким:
Java
1
App.sendLocalBroadcastMessage("test.ru.REFRESH_MAIN_ACTIVITY", "какой-то параметр");
Цитата Сообщение от TonyBicbaev Посмотреть сообщение
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(new BroadcastReceiver() {
* * * * * * @Override
* * * * * * public void onReceive(Context context, Intent intent) {
* * * * * * * * int task = intent.getIntExtra("KEY_METHOD", 0);
* * * * * * Log.e("e","e"); // по сути должен был вывести в логах "e", нечего не выводит.
* * * * * * }
* * * * },in);
ты не показал, что хранится в переменной in, а в ней должна хранится строка выше: "test.ru.REFRESH_MAIN_ACTIVITY", то есть ты ловишь сообщение по фильтру этой строкой
0
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 129
19.09.2016, 15:51  [ТС] #42
REALIST07,
вот так же написано
Java
1
2
String MAIN_ACTIVIVTY = "KEY_METHOD";
IntentFilter in = new IntentFilter(MAIN_ACTIVIVTY);
или нужно?
Java
1
2
3
String MAIN_ACTIVIVTY = "KEY_METHOD";
IntentFilter in = new IntentFilter(MAIN_ACTIVIVTY);
in.addAction(); // и тут та строка о которой вы говорите?
0
REALIST07
Автор FAQ
Автор FAQ
176 / 176 / 13
Регистрация: 11.06.2010
Сообщений: 934
19.09.2016, 20:18 #43
TonyBicbaev, заведи статическую переменную и пиши туда, чтобы не ошибиться,а в ресивере можно и так написать
Java
1
 new IntentFilter(Utils.ACTION_MESSAGE_UPDATE_STATE)
У тебя action строка не отражает действия, переменные должны быть осмысленными
0
TonyBicbaev
3 / 3 / 0
Регистрация: 04.11.2013
Сообщений: 129
20.09.2016, 06:10  [ТС] #44
REALIST07,

Java
1
2
3
4
5
6
7
8
9
  public static String MAIN_ACTIVIVTY = "com.chat.chat_v100.REFRESH_MAIN_ACTIVITY" ;
 LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                int task = intent.getIntExtra("KEY_METHOD",0);
 
            Log.e("e","e" + task);
            }
        },new IntentFilter(MainActivity.MAIN_ACTIVIVTY));
и
Java
1
  App.sendLocalBroadcastMessage(MainActivity.MAIN_ACTIVIVTY, "KEY_METHOD");
не работает(

Добавлено через 4 минуты
REALIST07, может манифест? а вообще даже ошибок никаких не выдает. не знаю что делать.
попробовал по этому примеру, работает, ну и логика там проще.
http://startandroid.ru/ru/uroki/vse-...treceiver.html

Добавлено через 21 минуту
REALIST07, Аллилуйя это в манифесте. Ошибка строчка permission была.
ну все спасибо вам за помощь, буду реализовать все подключение.
0
Alexvp
20.09.2016, 09:35     Приём сообщений от сервера в фоне
  #45

Не по теме:

TonyBicbaev, ты не мучайся Быстрее и дешевле станет заказать разработку у REALIST07
Похоже, ты еще только въезжаешь в это дело, а у же замахнулся на сложный проект. Если это коммерческий проект, то ты гений продаж. Но бедный, бедный заказчик

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2016, 09:35
Привет! Вот еще темы с ответами:

Приём сообщения клиентом от сервера - C#
Расскажи пожалуйста, как это правильно делается. я реализовал клиент, передачу на сервер он делает успешно, но приём от сервера не знаю...

Ожидание сообщений от сервера - JavaScript
Здравствуйте, пишу многопользовательскую игру змейка на джава скрипте. Реализовано управление змейкой с помощью клавиатуры ...

Получение сообщений от сервера к клиенту - Java Сети
Всем привет.Не могу решить проблему передачи от сервера к клиенту сообщений,состоящих их нескольких строк,чтоб клиент получил сразу...

Отправка сообщений с сервера клиенту - Delphi
Всем здрасте, наверно я не первый кто задает этот вопрос. Есть сервер и есть подключающийся клиент. Клиент могет отправлять сообщения...


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

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

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