如何使AlertDialog框出现在应用程序外部?

时间:2015-04-22 15:59:29

标签: java android alertdialog android-alertdialog android-alarms

@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();
}

我正在制作一个通知用户的简单闹钟应用程序。我想制作一个警告框,让用户可以选择在闹钟响起时关闭闹钟。我能够制作警报框,但它只出现在不在应用程序之外的应用程序中。我知道应用程序必须在后台运行。如果我需要显示更多代码或更具体,请询问。

3 个答案:

答案 0 :(得分:3)

添加一行:

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);
}

立即检查。

答案 1 :(得分:1)

如果他们没有解决您的问题,请不要接受答案,这会产生误导。

接受的答案是不正确的,因为它永远不会在您的申请之外。

原因:

  1. 它需要一个活动上下文而不是应用程序上下文。

  2. 如果您提供应用程序上下文,您的应用程序将崩溃 IllegalArgumentException-您需要使用Theme.AppCompat或其后代......

  3. 如果你需要问题中实际陈述的功能,你必须有一个单独的活动主题为here

    之类的对话框

    或者您可以使用窗口管理器向窗口添加自定义视图,并使其像here一样进行系统级警报。

答案 2 :(得分:0)

这样做会创建一个没有Activity的{​​{1}}或与之关联的ContentView,并在View中调用alertDialog方法,同时请记住设置背景使用onCreate

ActivityTransparent

该活动看起来像是一个对话框或符合您的偏好,您也可以回退到ColourDrawable,以便将Theme设置为Activity并将其视为{ {1}}也使用Dialog