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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android SQLite и NDK http://www.cyberforum.ru/android-dev/thread1804869.html
Гуру, кто-нибудь с подобным сталкивался? Предстоят сложные процедуры из нескольких SQLite на одну "команду". Математика расчетов SQL строки сложные - не помешало бы ускорить. Многие команды ОЧЕНЬ хочется скрыть от декомпила новичками(декомпилить яву куда проще чем декомпилить С++, и я хочу НАДЕЖНО зашифровать некоторые поля/таблицы). Реально ли подобное? Основы NDK знаю. Знаю как...
Android Вызывать последовательно методы или потоки Что то устал бороться с асинхронностью Явы. Например строки 6-7 выполняются после цикла 15-17, а активация кнопки и фона происходят сразу при вызове метода. public void Learn() { for (int x = 0; x < 5; x++){ timetaske2 = new TimeTaskE2(); timetaske2.execute(); try { timetaskje = new TimeTaskJe(); ... http://www.cyberforum.ru/android-dev/thread1804866.html
Отправка запроса (на сайт steam) с использованием httpurlconnection Android
Всем привет. Может кто-нибудь подсказать как сделать запрос на страницу предмета steam, например, на эту(http://steamcommunity.com/market/listings/730/FAMAS%20%7C%20Contrast%20Spray%20%28Factory%20New%29), для того чтобы получить html файл?
Android Запрет доступа к камере и геолокации
Как на Android studio сделать программу запрета доступа к камере и геолокации ? JAVA справится с этим ?
Android Возникает ошибка при запросе http://www.cyberforum.ru/android-dev/thread1804687.html
package com.example.ks; /** * Created by Denis on 08.09.2016. */ import java.util.ArrayList; import java.util.List; import com.example.ks.parser.JSONParser; import org.apache.http.NameValuePair;
Android Нет функции add Volley Здравствуйте, появилась надобность в post запросах на android использую код с данного сайта https://www.kompulsa.com/how-to-send-a-post-request-in-android/ но почему то кричит на последнюю строку "MyRequestQueue.add(MyStringRequest);" unknown class MyStringRequest + не распознаёт add. Подскажите пожалуйста что не так. подробнее

Показать сообщение отдельно
REALIST07
Автор FAQ
Автор FAQ
 Аватар для REALIST07
174 / 174 / 13
Регистрация: 11.06.2010
Сообщений: 932
15.09.2016, 15:06     Приём сообщений от сервера в фоне
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 !!!
* * }
 
Текущее время: 09:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru