Такой вопрос, как реализовать уведомления когда приложение открыто только звуковое уведомление, а когда приложение скрыто (кнопкой 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 разработке.
Для уведомления при работающем приложении, вам нужно сделать так:
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. Можно так же добавить кроме всего прочего моргание светодиода и вибрацию при уведомлении.
Можно просто проиграть звук:
try {
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
r.play();
} catch (Exception e) {
e.printStackTrace();
}
но мне кажется лучше показать уведомление еще, а то пользователь может не понять к чему звук.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Почему при такой записи компилятор не ругается:
Я использую паттерн MVVM и DataBinding в своём проектеПередать значения в Spinner мне удалось, но вот получить из оттуда - проблема