与Android alarmmanager工作 [英] working with 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分钟:
私人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
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屋!