Прежде всего позвольте мне предисловие к этому сообщению, сказав, что я не обычный пользователь 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. Одной из моделей может быть будильник в приложении «Часы». Когда будильник погаснет, весь экран перехвачен аварийным сигналом. Это может быть немного тяжело, но это возможно.
Любые мысли о том, что мы должны делать и как это сделать?
Билл
Jox, Спасибо за ваши мысли. Это в основном то, что я пытался сделать. Диалоговое окно предупреждения появляется просто, если мое приложение находится на переднем плане. Однако, если работает какая-то другая активность приложения. Когда я запускаю простую активность, которая отображает диалоговое окно, мое приложение меняет вид. Можно ли просто отобразить диалоговое окно над текущей Activity? – btschumy
Вам не следует начинать операцию, чтобы показать свое диалоговое окно, просто покажите свой диалог из вашего широковещательного приемника. – JoxTraex
Вы можете показать Toast из BroadcastReceiver, но я не думаю, что вы можете показать диалог. AlertDialog требует, чтобы Context и BroadcastReceiver не были контекстом. – btschumy