与Android alarmmanager工作 [英] working with android alarmmanager

查看:184
本文介绍了与Android alarmmanager工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个提醒样的应用程序,用户将设置其提醒。

大部分的教程和例子,我发现都是在报警后的特定时间或以pre定义的时间设置报警经理。但如何我可以将其设置为用户输入的数据和时间。此外,将有一个以上的警报设置由用户

所有这些都存储在一个数据库中,然后在一个lsitview填充。

这是一个片段,其中用户将被设定日期和时间:(文本DTE和TME可显示日期和时间,用户已经选择),然后当用户点击保存按钮,我想在设置报警由用户选择的时间

 日历日历= Calendar.getInstance();
TextView的DTE,TME,DOIT;
的ImageButton CAL;
的EditText enteredTask;
按钮来保存;
串taskentered,dateentered,timeentered;
tasks_Database_Operations tasksDatabaseOperations;@覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,捆绑savedInstanceState){
    查看查看= inflater.inflate(R.layout.add_task_fragment,集装箱,FALSE);
    DTE =(TextView中)view.findViewById(R.id.datetv);
    TME =(TextView中)view.findViewById(R.id.timetv);
    Log.d(生命周期HirakDebug,ATF视图中创建);
    返回视图。
}@覆盖
公共无效onResume(){
    super.onResume();
    Log.d(生命周期HirakDebug,ATF恢复);    enteredTask =(EditText上)getActivity()findViewById(R.id.user_entered_task)。
    DOIT =(TextView中)getActivity()findViewById(R.id.title)。
    CAL =(的ImageButton)getActivity()findViewById(R.id.select_date)。
    节省=(按钮)getActivity()findViewById(R.id.save_tsk)。
    save.setOnClickListener(本);
    cal.setOnClickListener(本);
}@覆盖
公共无效的onClick(查看视图){
    如果(查看== CAL){
        FragmentManager FM = getFragmentManager();
        date_time_picker DTP =新date_time_picker();
        dTP.setTargetFragment(此,1);
        dTP.setStyle(DialogFragment.STYLE_NO_TITLE,R.style.myCustomDialog);
        dTP.show(FM,DTP);
        Log.d(HirakDebug,add_task_frag的setDate称为);
    }否则如果(查看保存==){
        保存数据();
        Log.d(HirakDebug,add_task_frag SAVEDATA称为);
    }
}私人无效SAVEDATA(){
    字符串iidd = NULL;
    taskentered = enteredTask.getText()的toString()。
    dateentered = dte.getText()的toString()。
    。timeentered = tme.getText()的toString();
    tasksDatabaseOperations =新tasks_Database_Operations(getActivity());
    长ID = tasksDatabaseOperations.insertData(iidd,taskentered,dateentered,timeentered);
    如果(ID℃,){
        Log.e(HirakDebug,add_task_frag失败insertData操作);
    }其他{
        Log.d(HirakDebug,数据发送到被插入);
    }
    tasksDatabaseOperations.sqLiteDatabase.close();
    goBackToTaskListFragment();
}
私人无效goBackToTaskListFragment(){
    tasksListFrag TLF =新tasksListFrag();
    add_task_frag ATF =新add_task_frag();
    FragmentManager FM = getFragmentManager();
    FragmentTransaction英尺= fm.beginTransaction();
    ft.setCustomAnimations(R.anim.slide_up,R.anim.slide_down);
    ft.remove(本);
    ft.replace(R.id.dynamic_content,TLF,TLF);
    ft.commit();
    Log.d(HirakDebug,add_task_frag回到taskListFrag);
}@覆盖
公共无效的onActivityResult(INT申请code,INT结果code,意图数据){
    super.onActivityResult(要求code,结果code,数据);
    如果(结果code == Activity.RESULT_OK&放大器;&安培;请求code == 1){
        字符串日期= data.getStringExtra(日期);
        字符串时间= data.getStringExtra(时间);
        dte.setText(日期);
        tme.setText(时间);
    }
}


解决方案

也许重复闹钟,你需要使用的一个。
请点击以下链接...

设置重复报警
https://developer.android.com/training/scheduling/alarms.html

code例如形成上面的链接:

唤醒设备开火precisely上午8:30报警,此后每隔20分钟:

\r
\r

私人AlarmManager alarmMgr;\r
私人的PendingIntent alarmIntent;\r
...\r
alarmMgr =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);\r
意向意图=新意图(背景下,AlarmReceiver.class);\r
alarmIntent = PendingIntent.getBroadcast(上下文,0,意图,0);\r
\r
//设置闹钟在上午8:30开始\r
台历挂历= Calendar.getInstance();\r
calendar.setTimeInMillis(System.currentTimeMillis的());\r
calendar.set(Calendar.HOUR_OF_DAY,8);\r
calendar.set(Calendar.MINUTE,30);\r
\r
// setRepeating(),您可以指定precise自定义的时间间隔 - 在这种情况下,\r
\t// 20分钟。\r
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),\r
1000 * 60 * 20,alarmIntent);

\r

\r
\r

I have a reminder kind of app where users will set their reminders.

Most of the tutorials and example that i found were of alarm manager in which alarm is set up after specific time or at pre defined time. but how can i set it to user entered data and time. Also, there will be more than one alarms set up by the user.

All these are stored in a database and then populated in a lsitview.

This is a fragment in which user will be setting date and time: (texts "dte" and "tme" displays date and time that user has selected) and then when user clicks save button, i want to set alarm at the time that is selected by user.

Calendar calender = Calendar.getInstance();
TextView dte,tme, doit;
ImageButton cal;
EditText enteredTask;
Button save;
String taskentered, dateentered, timeentered;
tasks_Database_Operations tasksDatabaseOperations;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.add_task_fragment, container, false);
    dte = (TextView) view.findViewById(R.id.datetv);
    tme = (TextView) view.findViewById(R.id.timetv);
    Log.d("LifeCycle HirakDebug", "aTF View Created");
    return view;
}

@Override
public void onResume() {
    super.onResume();
    Log.d("LifeCycle HirakDebug", "aTF Resume");

    enteredTask = (EditText) getActivity().findViewById(R.id.user_entered_task);
    doit = (TextView) getActivity().findViewById(R.id.title);
    cal = (ImageButton) getActivity().findViewById(R.id.select_date);
    save = (Button) getActivity().findViewById(R.id.save_tsk);
    save.setOnClickListener(this);
    cal.setOnClickListener(this);
}

@Override
public void onClick(View view) {
    if (view == cal) {
        FragmentManager fm = getFragmentManager();
        date_time_picker dTP = new date_time_picker();
        dTP.setTargetFragment(this, 1);
        dTP.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.myCustomDialog);
        dTP.show(fm, "dTP");
        Log.d("HirakDebug", "add_task_frag setDate called");
    } else if (view == save) {
        saveData();
        Log.d("HirakDebug", "add_task_frag saveData called");
    }
}

private void saveData() {
    String iidd = null;
    taskentered = enteredTask.getText().toString();
    dateentered = dte.getText().toString();
    timeentered = tme.getText().toString();
    tasksDatabaseOperations = new tasks_Database_Operations(getActivity());
    long id = tasksDatabaseOperations.insertData(iidd, taskentered, dateentered, timeentered);
    if (id < 0) {
        Log.e("HirakDebug", "add_task_frag failed insertData operation");
    } else {
        Log.d("HirakDebug", "Data sent to be inserted");
    }
    tasksDatabaseOperations.sqLiteDatabase.close();
    goBackToTaskListFragment();
}
private void goBackToTaskListFragment() {
    tasksListFrag tLF = new tasksListFrag();
    add_task_frag aTF = new add_task_frag();
    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.setCustomAnimations(R.anim.slide_up, R.anim.slide_down);
    ft.remove(this);
    ft.replace(R.id.dynamic_content, tLF, "tLF");
    ft.commit();
    Log.d("HirakDebug", "add_task_frag went back to taskListFrag");
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK && requestCode == 1){
        String date = data.getStringExtra("date");
        String time = data.getStringExtra("time");
        dte.setText(date);
        tme.setText(time);
    }
}

解决方案

Perhaps Repeating Alarm the one you need to use. Please click on the link below...

Set a Repeating Alarm https://developer.android.com/training/scheduling/alarms.html

Code example form the link above:

Wake up the device to fire the alarm at precisely 8:30 a.m., and every 20 minutes thereafter:

	private AlarmManager alarmMgr;
	private PendingIntent alarmIntent;
	...
	alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
	Intent intent = new Intent(context, AlarmReceiver.class);
	alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

	// Set the alarm to start at 8:30 a.m.
	Calendar calendar = Calendar.getInstance();
	calendar.setTimeInMillis(System.currentTimeMillis());
	calendar.set(Calendar.HOUR_OF_DAY, 8);
	calendar.set(Calendar.MINUTE, 30);

	// setRepeating() lets you specify a precise custom interval--in this case,
	// 20 minutes.
	alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
			1000 * 60 * 20, alarmIntent);

这篇关于与Android alarmmanager工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆