0

Прежде всего позвольте мне предисловие к этому сообщению, сказав, что я не обычный пользователь Android. Наши продукты предназначены для iOS и Android, и у меня больше опыта на стороне iOS. Я ищу советы о том, какой должен быть соответствующий «опыт Android» для функции и как ее реализовать.Предупреждение пользователя о событиях, чувствительных к времени

У нас есть приложение, которое представляет собой ряд «событий» для пользователя, которые будут происходить в течение дня. Пользователи могут попросить вас уведомить вас за несколько минут до того, как произойдет одно или несколько из этих событий. Мне нужно знать, как эти уведомления должны быть представлены пользователю.

Я думаю, что я понимаю, как использовать AlertManager для уведомления Activity или BroadcastReceiver, когда событие должно произойти. Вопрос в том, что должно произойти дальше.

Мы могли бы использовать систему уведомлений Android (используя NotificationCompat.Builder) для ввода уведомлений в систему. Проблема с этим - я думаю, что это слишком тонко. Это события, зависящие от времени, и пользователь должен обратить внимание на устройство, когда это произойдет.

Другая возможность заключается в отображении диалогового окна оповещений для пользователя (и, возможно, звука), когда событие должно произойти. У меня это работает, когда наше приложение находится на переднем плане. Однако, когда приложение находится в фоновом режиме (или, возможно, остановлено), я бы идеально хотел разместить предупреждение о том, какая активная активность активна. Это не работает должным образом. Вместо этого основное действие моего приложения, похоже, выведено на передний план, а затем поверх него отображается активность Alert, но с черным фоном (несмотря на то, что я использую прозрачную тему для активности предупреждения).

Вот код для этого:

private void createAlarm() 
{ 
    Intent intent = new Intent(getApplicationContext(), AlarmDisplayer.class); 
    PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 3333, intent, 0); 

    //getting current time and add 5 seconds in it 
    Calendar cal = Calendar.getInstance(); 
    cal.add(Calendar.SECOND, 10); 
    //registering our pending intent with alarmmanager 
    AlarmManager alarmMgr = (AlarmManager) getSystemService(ALARM_SERVICE); 
    alarmMgr.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent); 
} 


public class AlarmDisplayer extends Activity implements OnClickListener 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setMessage("Alert received xxx"); 
     builder.setNeutralButton("OK", this); 
     AlertDialog dialog = builder.create(); 
     dialog.show(); 
    } 

    public void onClick(DialogInterface dialog, int which) 
    { 
     this.finish(); 
    } 
} 

Из манифеста:

<activity 
     android:name="com.southernstars.skysafari.AlarmDisplayer" 
     android:theme="@style/Theme.Transparent" 
     android:configChanges="orientation" 
     android:label="" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

Или, может быть, есть какой-то другой способ, которым мы должны делать это на Android. Одной из моделей может быть будильник в приложении «Часы». Когда будильник погаснет, весь экран перехвачен аварийным сигналом. Это может быть немного тяжело, но это возможно.

Любые мысли о том, что мы должны делать и как это сделать?

Билл

ответ

0

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

  1. идет к вашей основной деятельности, чтобы показать более подробную информацию
  2. Snooze/игнорировать/отменить.

Кроме того, чтобы убедиться, что у вас есть сообщение ... установить ваш вещательный приемник должен быть зарегистрирован в manfiest и НЕ программно.

+0

Jox, Спасибо за ваши мысли. Это в основном то, что я пытался сделать. Диалоговое окно предупреждения появляется просто, если мое приложение находится на переднем плане. Однако, если работает какая-то другая активность приложения. Когда я запускаю простую активность, которая отображает диалоговое окно, мое приложение меняет вид. Можно ли просто отобразить диалоговое окно над текущей Activity? – btschumy

+0

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

+0

Вы можете показать Toast из BroadcastReceiver, но я не думаю, что вы можете показать диалог. AlertDialog требует, чтобы Context и BroadcastReceiver не были контекстом. – btschumy

0

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

0

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

Смежные вопросы