Как реализовать уведомления android

140
16 сентября 2021, 02:30

Такой вопрос, как реализовать уведомления когда приложение открыто только звуковое уведомление, а когда приложение скрыто (кнопкой Home), то push уведомление.

В отдельном потоке обновляется статус заказа:

public class CommonOrderProcessThread {
    private Integer mOrderId;
    private OrderProcessListener mListener;
    private Thread mThread;
    public CommonOrderProcessThread(Integer orderId, OrderProcessListener listener) {
        mOrderId = orderId;
        mListener = listener;
    }
    public void start() {
        if (mThread != null && !mThread.isInterrupted()) {
            return;
        }
        mThread = new Thread(new OrderProcessRunnable());
        mThread.start();
    }
    public void stop() {
        if (mThread != null && !mThread.isInterrupted()) {
            mThread.interrupt();
        }
    }
    private class OrderProcessRunnable implements Runnable {
        @Override
        public void run() {
            while (!mThread.isInterrupted()) {
                try {
                    try {
                        retrofit2.Response<Response<OrderModel>> response = ApiService
                                .getInstance()
                                .getApi()
                                .getOrder(mOrderId)
                                .execute();
                        if (response.isSuccessful() && response.body() != null) {
                            mListener.handleOrderUpdated(response.body().result);
                        }
                    } catch (IOException e) {
                        continue;
                    }
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    break;
                }
            }
        }
    }
    public interface OrderProcessListener {
        public void handleOrderUpdated(OrderModel order);
    }
}

Может кто подскажет? Я новичек в android разработке.

Answer 1

Для уведомления при работающем приложении, вам нужно сделать так:

NotificationCompat.Builder builder =  
        new NotificationCompat.Builder(this)  
        .setSmallIcon(R.drawable.ic_launcher)  
        .setContentTitle("Notifications Example")  
        .setContentText("This is a test notification");  

Intent notificationIntent = new Intent(this, MenuScreen.class);  
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent,   
        PendingIntent.FLAG_UPDATE_CURRENT);  
builder.setContentIntent(contentIntent);  
builder.setAutoCancel(true);
builder.setLights(Color.BLUE, 500, 500);
long[] pattern = {500,500,500,500,500,500,500,500,500};
builder.setVibrate(pattern);
builder.setStyle(new NotificationCompat.InboxStyle());
// Add as notification  
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);  
manager.notify(1, builder.build());  

а для добавления звукового сопровождения нужно еще добавить строку:

Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
builder.setSound(alarmSound);

Когда приложение свернуто, то все ровно так же как и когда приложение работает не в фоне, при сворачивании (можно так же и при закрытии добавить) я бы добавил фоновый процесс который будет проверять данные с сервера (но ему нужен будет интернет соответственно). Вот есть статья1, статья2 и статья3. Можно так же добавить кроме всего прочего моргание светодиода и вибрацию при уведомлении.

UPDATE

Можно просто проиграть звук:

try {
    Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
    r.play();
} catch (Exception e) {
    e.printStackTrace();
}

но мне кажется лучше показать уведомление еще, а то пользователь может не понять к чему звук.

READ ALSO
Дженерики. Ошибка Error:(2, 25) java: generic array creation

Дженерики. Ошибка Error:(2, 25) java: generic array creation

Почему при такой записи компилятор не ругается:

196
Выборка из трёх связанных таблиц

Выборка из трёх связанных таблиц

Есть 3 таблицы (postgreSQL):

144
Данные MutableLiveData из Spinner возвращают null

Данные MutableLiveData из Spinner возвращают null

Я использую паттерн MVVM и DataBinding в своём проектеПередать значения в Spinner мне удалось, но вот получить из оттуда - проблема

176