自定义警报响铃后显示警告对话框

时间:2014-05-02 02:56:00

标签: android android-alertdialog android-alarms

背景

我的应用程序填充包含特定时间列表的列表视图。当用户在列表视图中选择特定项目时,将针对该时间安排/触发警报。现在,我可以在闹钟响起时创建通知。但现在,我想创建一个警告对话框而不是通知。此外,当用户单击警告对话框上的“确定”按钮时,应停止警报并关闭警报框。我怎样才能做到这一点?

另外,请向我解释使用哪个类来调用警告对话框以及我应该使用哪个类进行扩展,以及在哪里放置我的意图或待处理的意图来调用警告对话框。

P.S:我已经使用广播接收器为我的闹钟从定时列表中选定的时间安排。

安排闹钟的课程

public class mrvtoparanur extends Activity {
    int hours,mins;
    long time;
    CSVAdapter mAdapter;
    final static int RQS_1=1;
    Calendar cal = Calendar.getInstance();
    Calendar calset = (Calendar)cal.clone();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.mrvtoparanur);
        final ListView mList = (ListView)findViewById(R.id.mrvtoparanurlist);
        mAdapter=new CSVAdapter(this,-1);
        mList.setAdapter(mAdapter); 
        mList.setOnItemClickListener(new OnItemClickListener()
        {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                clock clicked=mAdapter.getItem(arg2);
                String [] res = clicked.getTime().split(":");
                hours=Integer.parseInt(res[0]);
                mins=Integer.parseInt(res[1]);
                Toast.makeText(getApplicationContext(), "You selected time :"+hours+"hours and "+mins+"mins", Toast.LENGTH_SHORT).show();  
                ScheduleAlarm();
            }
        });
    }

    protected void ScheduleAlarm() {
        // TODO Auto-generated method stub

        calset.set(Calendar.HOUR_OF_DAY, hours);
        calset.set(Calendar.MINUTE, mins);
        calset.set(Calendar.SECOND, 0);

        Long time = calset.getTimeInMillis();
        Intent intentAlarm = new Intent(this, AlarmReciever.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC_WAKEUP, time, pendingIntent);
        Toast.makeText(this, "Reminder Set", Toast.LENGTH_SHORT).show();
    }

    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

闹钟接收器

public class AlarmReciever extends BroadcastReceiver
{
    Context context ;

    @Override
    public void onReceive( Context context, Intent intent)
    {
        // TODO Auto-generated method stub

        // here you can start an activity or service depending on your need
        // for example you can start an activity to vibrate phone or to ring the phone   
        Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
        Ringtone r = RingtoneManager.getRingtone(context, notification);
        r.play(); 
        Toast.makeText(context, "Alarm Trigerred", Toast.LENGTH_SHORT).show();
    }
}

时钟项目

public class clock {
    private String t;

    public String getTime() {
        return t;
    }

    public void setTime(String t) {
        this.t = t;
    }
}

我的问题是:如果我必须在闹钟响起后立即启动警报,我是否应该创建一个单独的新类文件以显示警告对话框?或者我可以在上面的任何类中嵌入警报对话框的代码吗?如果我可以嵌入它,那么我应该选择嵌入警报对话框代码以及从哪个类调用警报对话框?

2 个答案:

答案 0 :(得分:0)

您可以在收到活动时使用对话框布局创建新活动。 但我不确定显示一个对话框是个好主意。用户会很烦人。 为什么不保留通知?

答案 1 :(得分:0)

https://source.android.com/下载android源代码,然后查看./packages/apps/DeskClock/src/com/android/deskclock/AlarmAlertFullScreen.java代码。它似乎只是你所描述的。