Android中AlarmManager使用示例(持续更新,关于时间的设置已经更改)
来源:互联网 发布:全球宏观经济数据库 编辑:程序博客网 时间:2024/05/11 18:38
现在普遍的手机都会有一个闹钟的功能,如果使用Android来实现一个闹钟可以使用AtarmManager来实现。AtarmManager提供了一种系统级的提示服务,允许你安排在将来的某个时间执行一个服务。AlarmManager对象一般不直接实例化,而是通过Context.getsystemservice(Context.ALARM_SERVICE)方法获得。
下面是我们运用之前用到的TimePickerDialog结合AlarmManager,实现一个可以设定任意时间而且可以重复的闹钟,演示效果如下(大概每晚23:48会有闹钟通知):
layout中activity_main.xml布局文件代码:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.administrator.alarmdemo.MainActivity"> <TextView android:id="@+id/time_tv" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请设置闹铃时间" android:clickable="true" android:onClick="setTime" android:gravity="center"/> <TextView android:id="@+id/time_tv2" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请设置响铃间隔时间" android:clickable="true" android:onClick="setIntervalTime" android:gravity="center"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="open" android:text="开启闹钟"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="stop" android:text="结束闹钟"/></LinearLayout>
AndroidMainfest.xml配置文件(添加自定义重复闹铃receiver):
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.administrator.alarmdemo"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".RepeatAlarmReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="repeatAlarm" /> </intent-filter> </receiver> <activity android:name=".Main2Activity"></activity> </application></manifest>
RepeatAlarmReceiver.java广播接收文件:
import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;public class RepeatAlarmReceiver extends BroadcastReceiver { public RepeatAlarmReceiver() { } @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "重复闹钟", Toast.LENGTH_SHORT).show(); }}
MainActivity.java代码实现:
import android.app.AlarmManager;import android.app.PendingIntent;import android.app.TimePickerDialog;import android.content.Intent;import android.provider.Settings;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.TextView;import android.widget.TimePicker;import java.util.Calendar;public class MainActivity extends AppCompatActivity { AlarmManager alarmManagerSet; PendingIntent pendingIntentSet; int myHour,myMinute;//声明响铃时间 int intervalHour,intervalMinute,intervalSecond;//声明间隔时间(响铃周期) Calendar calendar;//声明日历 TextView time_tv,time_tv2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);alarmManagerSet= (AlarmManager) getSystemService(ALARM_SERVICE);//设置声明时间格式 calendar = Calendar.getInstance(); myHour=calendar.get(Calendar.HOUR_OF_DAY); myMinute=calendar.get(Calendar.MINUTE); intervalHour=calendar.get(Calendar.HOUR_OF_DAY); intervalMinute=calendar.get(Calendar.MINUTE);//获取时间设置的TextView time_tv= (TextView) findViewById(R.id.time_tv); time_tv2= (TextView) findViewById(R.id.time_tv2); }//使用timePickerDialog设置闹铃响铃时间 public void setTime(View view){ TimePickerDialog timePickerDialog =new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { myHour=hourOfDay; myMinute=minute; time_tv.setText(myHour+":"+myMinute); } },myHour,myMinute,true); timePickerDialog.show(); }//使用timePickerDialog设置闹铃响铃周期(间隔) public void setIntervalTime(View view){ TimePickerDialog timePickerDialog =new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { intervalHour=hourOfDay; intervalMinute=minute; time_tv2.setText(intervalHour+":"+intervalMinute); } },intervalHour,intervalMinute,true); timePickerDialog.show(); } public void open(View view){//分别获取闹铃响铃时间以及闹铃间隔时间(用冒号分割存储于数组中) String[] triggerTime=time_tv.getText().toString().split(":"); String[] intervalTime=time_tv2.getText().toString().split(":");//通过Calendar分别获取对应的小时和分钟(需要将String转换为int) Calendar calendar1 = Calendar.getInstance(); calendar1.set(Calendar.HOUR_OF_DAY,Integer.parseInt(triggerTime[0]));calendar1.set(Calendar.MINUTE,Integer.parseInt(triggerTime[1]));//得到点击触发的毫秒值(即闹钟提醒时间) long triggerAtMillis= calendar1.getTimeInMillis(); //设定pendinngIntent接受自定义闹铃广播pendingIntentSet = PendingIntent.getBroadcast(this,0,new Intent("repeatAlarm"),0);//判断如果当前系统时间大于设置的闹铃时间,则在第二天开始启用该闹铃if(System.currentTimeMillis()>triggerAtMillis){ triggerAtMillis=triggerAtMillis+24*60*60*1000; }//使用.setRepeating设置重复闹铃 alarmManagerSet.setRepeating(AlarmManager.RTC_WAKEUP,triggerAtMillis,intervalMillis,pendingIntentSet); } public void stop(View v){ alarmManagerSet.cancel(pendingIntentSet); }}
0 0
- Android中AlarmManager使用示例(持续更新,关于时间的设置已经更改)
- Android中AlarmManager使用示例
- Eclipse使用设置(持续更新中)
- Android 中 AlarmManager的使用
- Android中alarmManager的使用
- Android中AlarmManager的使用
- Android中AlarmManager的使用
- Android中AlarmManager的使用
- Android Studio中经常使用的快捷键(持续更新)
- 关于注解的使用(持续更新...)
- Gradle 的使用 (持续更新中)
- Android 使用AlarmManager设置闹钟
- android AlarmManager的使用
- android AlarmManager的使用
- Android中使用AlarmManager需注意设置进程属性
- Android中使用AlarmManager需注意设置进程属性
- 关于Android系统的光标和软键盘(持续更新中)
- 关于mybatis使用中遇到的问题集合帖(持续更新)
- MySql安装
- 笔记
- IIS+Tomcat配置共用80端口
- <C语言漫谈录>2——C语言之路启程
- 实现弹出一个隐藏的div窗口,body页面变成灰色并且不可被编辑
- Android中AlarmManager使用示例(持续更新,关于时间的设置已经更改)
- 解读钉子的“一个 Div 可以做到的 …”
- 第二天03 管理原始码与位码文档(学习笔记)
- Node中的JavaScript
- MyBatis Generator 详解
- Tarjan点的双联通(寻找割点)
- azkaban 3.0 编译安装
- BUCT OJ 任务安排问题
- Spark Shuffle FetchFailedException解决方案