Как заставить окно AlertDialog отображаться вне приложения?
@Override
public void run() {
//Create thread that can alter the UI
AlarmPage.this.runOnUiThread(new Runnable() {
public void run() {
cal = Calendar.getInstance();
//See if current time matches set alarm time
if((cal.get(Calendar.HOUR_OF_DAY) == alarmTime.getCurrentHour())
&& (cal.get(Calendar.MINUTE) == alarmTime.getCurrentMinute())){
//If the sound is playing, stop it and rewind
if(sound.isPlaying()){
ShowDialog();
alarmTimer.cancel();
alarmTask.cancel();
alarmTask = new PlaySoundTask();
alarmTimer = new Timer();
alarmTimer.schedule(alarmTask, sound.getDuration(), sound.getDuration());
}
sound.start();
}
}
});
}
public void ShowDialog() {
final AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
alertDialog.setTitle("REMINDER!");
alertDialog.setMessage("Turn off alarm by pressing off");
alertDialog.setNegativeButton("Off", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "OFF", Toast.LENGTH_SHORT);
}
});
alertDialog.show();
}
Я делаю простое приложение будильника, которое уведомляет пользователя. Я хочу создать окно предупреждения, которое дает пользователю возможность отключить будильник, когда он выключится. Я смог сделать окно предупреждения, но он появляется только в приложении, не за пределами приложения. Я понимаю, что приложение должно быть в фоновом режиме. Если мне нужно показать больше кода или быть более конкретным, просто спросите пожалуйста.
Ответы
Ответ 1
Добавьте строку как:
public void ShowDialog() {
final AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
alertDialog.setTitle("REMINDER!");
alertDialog.setMessage("Turn off alarm by pressing off");
alertDialog.setNegativeButton("Off", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "OFF", Toast.LENGTH_SHORT).show();
}
});
alertDialog.show();
// line you have to add
alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
}
сейчас.
Ответ 2
Создайте Activity
без ContentView
или View
, связанных с ним, и вызовите ваш метод alertDialog
в onCreate
, также не забудьте установить фон Activity
на Transparent
, используя ColourDrawable
И эта деятельность будет выглядеть как диалог или будет соответствовать вашим предпочтениям, вы также можете вернуться к Theme
, чтобы вы могли установить Activity
как Dialog
и относиться к нему как к Dialog
, также используйте DialogFragment
Ответ 3
Не принимайте ответы, если они не затрагивают ваш вопрос, это вводит в заблуждение.
Принятый ответ неверен, поскольку он никогда не будет работать вне вашего приложения.
Причина:
-
Для этого требуется контекст действия, а не контекст приложения.
-
Если вы предоставите контекст приложения, ваше приложение выйдет из строя с помощью IllegalArgumentException - вам нужно использовать Theme.AppCompat или их десятичные имена...
Если вам нужна функциональность, как указано в вопросе, вы должны иметь отдельную деятельность в виде диалога, например
или вы можете добавить пользовательское представление в свое окно с помощью диспетчера окон и сделать его системным оповещением, например здесь.