如何在警报上创建AlertDialog

问题描述

(((我在SO或Internet上找不到此处描述的内容

我有一个TimePicker,选择了时间后,便会激活警报。 (假设现在是11:00,我在TimePicker中选择11.05,11:05,则触发警报。)

这部分代码运行正常。我从this link获取了警报代码

现在,我的问题:

当警报响起时(作为声音+吐司),我实际上想要一个声音+ AlertDialog。当我单击“确定”以关闭AlertDialog时,它将关闭AlertDialog并停止警报声音。

我尝试了几种解决方案,但没有成功:我知道如何正确地编写AlertDialog,但是我无法使用alarmManager.cancel(pendingIntent);将此代码部分正确地放置在当前代码中以在PositiveButton中取消警报AlertDialog。

有人知道在这里怎么做吗?

这是我的代码

以下内容添加到清单中的<Application>标记中:

<receiver android:name=".AlarmReceiver"></receiver>

这是我打电话的主要班级:

public class MyAlarm extends AppCompatActivity {
    TimePickerDialog picker2;
    EditText eText2;

    TimePicker alarmTimePicker;
    PendingIntent pendingIntent;
    AlarmManager alarmManager;
    Long time;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_alarm);

        alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

        eText2 = (EditText) findViewById(R.id.editText2);
        eText2.setInputType(InputType.TYPE_NULL);
        eText2.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final Calendar cldr = Calendar.getInstance();
                int hour = cldr.get(Calendar.HOUR_OF_DAY);
                int minutes = cldr.get(Calendar.MINUTE);
                picker2 = new TimePickerDialog(MyAlarm.this,new TimePickerDialog.OnTimeSetListener() {
                            @Override
                            public void onTimeSet(TimePicker tp,int sHour,int sMinute) {
                                String sTime = String.format("%02d",sHour) + "." + String.format("%02d",sMinute) + " Uhr";
                                eText2.setText(sTime);

                                //Alarm -----------------------------------------------------------------

                                Toast.makeText(MyAlarm.this,"ALARM ON",Toast.LENGTH_SHORT).show();
                                Calendar calendar = Calendar.getInstance();
                                calendar.set(Calendar.HOUR_OF_DAY,sHour);
                                calendar.set(Calendar.MINUTE,sMinute);
                                Intent intent = new Intent(MyAlarm.this,AlarmReceiver.class);
                                pendingIntent = PendingIntent.getbroadcast(MyAlarm.this,intent,0);

                                time = (calendar.getTimeInMillis() - (calendar.getTimeInMillis() % 60000));
                                if (System.currentTimeMillis() > time) {
                                    if (calendar.AM_PM == 0)
                                        time = time + (1000 * 60 * 60 * 12);
                                    else
                                        time = time + (1000 * 60 * 60 * 24);
                                }
                                alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,time,pendingIntent);


                            }
                        },hour,minutes,true);
                picker2.show();
            }
        });
   }

}

以及相应的接收器类:

public class AlarmReceiver extends broadcastReceiver {

    @Override
    public void onReceive(Context context,Intent intent) {
        Toast.makeText(context,"Alarm!",Toast.LENGTH_LONG).show();

        Uri alarmUri = ringtoneManager.getDefaultUri(ringtoneManager.TYPE_ALARM);
        if (alarmUri == null) {
            alarmUri = ringtoneManager.getDefaultUri(ringtoneManager.TYPE_NOTIFICATION);
        }
        ringtone ringtone = ringtoneManager.getringtone(context,alarmUri);
        ringtone.play();

    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...