Push уведомления

191
06 июля 2017, 01:00

В фоновом режиме приложение отправляет запросы на сервер, в цикле. По задумке если ответ сервера содержит 1, надо отправить пуш уведомление. Код работает но оповещение нельзя закрыть и при переходе по уведомлению оно не пропадает.И еще, когда сервер выводит 1 , оповещения приходят до тех пор пока 1 не сменится 0, как можно это исправить?

public class MyService1 extends Service {
public MyService1() {
}
private final int NOTIFICATION_ID = 38;
private NotificationManager nn;
String q = "http://site/new.php";
public  void  onCreate(){
    super.onCreate();
    new JSON().execute(q);
}
@Override
public IBinder onBind(Intent intent) {
    // TODO: Return the communication channel to the service.
    throw new UnsupportedOperationException("Not yet implemented");
}
public class JSON extends AsyncTask<String, String, String> {
    @Override
    protected String doInBackground(String... params) {
        HttpURLConnection connection = null;
        BufferedReader reader = null;
        while (true) {
            onCreate();
            try {
                URL url = new URL(params[0]);
                connection = (HttpURLConnection) url.openConnection();
                connection.connect();
                InputStream stream = connection.getInputStream();
                reader = new BufferedReader(new InputStreamReader(stream));
                StringBuffer buffer = new StringBuffer();
                String line = "";
                while ((line = reader.readLine()) != null) {
                    buffer.append(line);
                }
                return buffer.toString();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (connection != null) {
                    connection.disconnect();
                }
                try {
                    if (reader != null) {
                        reader.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return null;
        }
    }
    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        if (result.contains("1")) {
            Notification.Builder builder = new Notification.Builder(getApplicationContext());
            Intent intent = new Intent(getApplicationContext(),MainActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0,intent,PendingIntent.FLAG_CANCEL_CURRENT);
            builder
                    .setContentIntent(pendingIntent)
                    .setSmallIcon(R.drawable.ic_action_name)
                    .setLargeIcon(BitmapFactory.decodeResource(getApplication().getResources(),R.drawable.ic_action_name))
                    .setTicker("new messsege")
                    .setWhen(System.currentTimeMillis())
                    .setAutoCancel(true)
                    .setContentTitle("Not")
                    .setContentText("put this mess");
            Notification notification = builder.build();
            notification.defaults = Notification.DEFAULT_VIBRATE;
            startForeground(37,notification);
        } else {
        }
    }
}

}

Answer 1

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

Во-вторых, Вы не просто показываете нотификацию, а запускаете foreground сервис, в таком случае нотификацию нельзя просто смахнуть свайпом, ведь она связана с высоко приоритетной выполняющейся задачей. Если Вы действительно хотите запускать foreground сервис, то нотификация пропадёт только когда Ваше приложением вызовет stopForeground или когда пользователь убьёт его в настройках или по долгому тапу, если оболочка это позволяет (не через кнопку последних приложений).

В-третьих, если Вам нужно просто показать нотификацию, то необходимо воспользоваться NotificationManager, примеры тут и тут. С его же помощью нотификацию также можно удалить программно. Обратите внимание на установку PendingIntent в примерах, если необходимо что-то делать по нажатию на нотификацию.

READ ALSO
Java, асинхронная отправка множества get-запросов

Java, асинхронная отправка множества get-запросов

Здравствуйте! Возник такой вопросКак правильно отправлять N (N > 100) get-запроcов в секунду на указанный url?

226
Глобальная обработка Нажатий мыши Java

Глобальная обработка Нажатий мыши Java

Хотелось бы обработать нажатие мыши не только в своем приложении, но и глобальноЕсть такой код :

179
Добавление поиска SearchView в Activity не содержащую ListView

Добавление поиска SearchView в Activity не содержащую ListView

Вопрос заключается в следующем: я реализовал SearchView в ToolBar, при этом в активности нет элемента ListViewНа ней расположены 10 кнопок с картинками

187
Преобразование String to Int без parseInt

Преобразование String to Int без parseInt

Нужно реализовать метод без использования parseIntПодскажите основной алгоритм как это сделать ?

173