Android中AlarmManager使用示例

现在普遍的手机都会有一个闹钟的功能,如果使用Android来实现一个闹钟可以使用AtarmManager来实现。AtarmManager提供了一种系统级的提示服务,允许你安排在将来的某个时间执行一个服务。AlarmManager对象一般不直接实例化,而是通过Context.getsystemservice(Context.ALARM_SERVICE)方法获得。

下面是我们运用之前用到的TimePickerDialog结合AlarmManager,实现一个可以设定任意时间而且可以重复的闹钟,演示效果如下(大概每晚23:48会有闹钟通知):

layout中activity_main.xml布局文件代码:

复制代码
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:id="@+id/activity_main"
 6     android:layout_width="match_parent"
 7     android:layout_height="match_parent"
 8     android:orientation="vertical"
 9     tools:context="com.example.administrator.alarmdemo.MainActivity">
10     <TextView
11         android:id="@+id/time_tv"
12         android:layout_width="match_parent"
13         android:layout_height="wrap_content"
14         android:hint="请设置闹铃时间"
15         android:clickable="true"
16         android:onClick="setTime"
17         android:gravity="center"/>
18     <TextView
19         android:id="@+id/time_tv2"
20         android:layout_width="match_parent"
21         android:layout_height="wrap_content"
22         android:hint="请设置响铃间隔时间"
23         android:clickable="true"
24         android:onClick="setIntervalTime"
25         android:gravity="center"/>
26     <Button
27         android:layout_width="match_parent"
28         android:layout_height="wrap_content"
29         android:onClick="open"
30         android:text="开启闹钟"/>
31     <Button
32         android:layout_width="match_parent"
33         android:layout_height="wrap_content"
34         android:onClick="stop"
35         android:text="结束闹钟"/>
36 </LinearLayout>
复制代码

AndroidMainfest.xml配置文件(添加自定义重复闹铃receiver):

复制代码
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.example.administrator.alarmdemo">
 4     <application
 5         android:allowBackup="true"
 6         android:icon="@mipmap/ic_launcher"
 7         android:label="@string/app_name"
 8         android:supportsRtl="true"
 9         android:theme="@style/AppTheme">
10         <activity android:name=".MainActivity">
11             <intent-filter>
12                 <action android:name="android.intent.action.MAIN" />
13 
14                 <category android:name="android.intent.category.LAUNCHER" />
15             </intent-filter>
16         </activity>
17         <receiver
18             android:name=".RepeatAlarmReceiver"
19             android:enabled="true"
20             android:exported="true">
21             <intent-filter>
22                 <action android:name="repeatAlarm" />
23             </intent-filter>
24         </receiver>
25         <activity android:name=".Main2Activity"></activity>
26     </application>
27 
28 </manifest>
复制代码

RepeatAlarmReceiver.java广播接收文件:

复制代码
 1 import android.content.BroadcastReceiver;
 2 import android.content.Context;
 3 import android.content.Intent;
 4 import android.widget.Toast;
 5 
 6 public class RepeatAlarmReceiver extends BroadcastReceiver {
 7     public RepeatAlarmReceiver() {
 8     }
 9     @Override
10     public void onReceive(Context context, Intent intent) {
11         Toast.makeText(context, "重复闹钟", Toast.LENGTH_SHORT).show();
12     }
13 }
复制代码

MainActivity.java代码实现:

复制代码
 1 import android.app.AlarmManager;
 2 import android.app.PendingIntent;
 3 import android.app.TimePickerDialog;
 4 import android.content.Intent;
 5 import android.provider.Settings;
 6 import android.support.v7.app.AppCompatActivity;
 7 import android.os.Bundle;
 8 import android.view.View;
 9 import android.widget.TextView;
10 import android.widget.TimePicker;
11 
12 import java.util.Calendar;
13 
14 public class MainActivity extends AppCompatActivity {
15     AlarmManager alarmManagerSet;
16     PendingIntent pendingIntentSet;
17     int myHour,myMinute;//设置响铃时间
18     int intervalHour,intervalMinute,intervalSecond;//设置间隔时间(响铃周期)
19     Calendar calendar;//声明日历 demo 
20     TextView time_tv,time_tv2;
21 
22     @Override
23     protected void onCreate(Bundle savedInstanceState) {
24         super.onCreate(savedInstanceState);
25         setContentView(R.layout.activity_main);
26         alarmManagerSet= (AlarmManager) getSystemService(ALARM_SERVICE);
27         calendar = Calendar.getInstance();
28         myHour=calendar.get(Calendar.HOUR_OF_DAY);
29         myMinute=calendar.get(Calendar.MINUTE);
30 
31         intervalHour=calendar.get(Calendar.HOUR_OF_DAY);
32         intervalMinute=calendar.get(Calendar.MINUTE);
33 
34         time_tv= (TextView) findViewById(R.id.time_tv);
35         time_tv2= (TextView) findViewById(R.id.time_tv2);
36     }
37     public void setTime(View view){
38         TimePickerDialog timePickerDialog =new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
39             @Override
40             public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
41                 myHour=hourOfDay;
42                 myMinute=minute;
43                 time_tv.setText(myHour+":"+myMinute);
44             }
45         },myHour,myMinute,true);
46         timePickerDialog.show();
47     }
48     public void setIntervalTime(View view){
49         TimePickerDialog timePickerDialog =new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
50             @Override
51             public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
52                 intervalHour=hourOfDay;
53                 intervalMinute=minute;
54                 time_tv2.setText(intervalHour+":"+intervalMinute);
55             }
56         },intervalHour,intervalMinute,true);
57         timePickerDialog.show();
58     }
59     public void open(View view){
60         String[] triggerTime=time_tv.getText().toString().split(":");
61         String[] intervalTime=time_tv2.getText().toString().split(":");
62         long triggerAtMillis= Integer.parseInt(triggerTime[0])*1000*60*60+Integer.parseInt(triggerTime[1])*60*1000+System.currentTimeMillis();
63         long intervalMillis=Integer.parseInt(intervalTime[0])*1000*60*60+Integer.parseInt(intervalTime[1])*60*1000;
64         pendingIntentSet = PendingIntent.getBroadcast(this,0,new Intent("repeatAlarm"),0);
65         alarmManagerSet.setRepeating(AlarmManager.RTC_WAKEUP,triggerAtMillis,intervalMillis,pendingIntentSet);
66     }
67     public void stop(View v){
68         alarmManagerSet.cancel(pendingIntentSet);
69     }
70 }
复制代码
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: AndroidAlarmManager是一个用于定时任务的类,可以用来在特定时间触发一些操作,比如发送通知、执行某个程序等等。 一个简单的AlarmManager示例可以是设置一个定时任务,在每天的特定时间执行某个操作。 首先,我们需要在AndroidManifest.xml文件添加权限: <uses-permission android:name="android.permission.SET_ALARM" /> 接下来,我们可以在一个Activity或者Service编写如下代码: ```java import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; public class AlarmManagerDemo { public static void setAlarm(Context context) { // 获取AlarmManager实例 AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); // 创建Intent,指定触发广播的Action Intent intent = new Intent(context, AlarmReceiver.class); intent.setAction("com.example.alarmdemo.ALARM_TRIGGERED"); // 创建PendingIntent,用于触发广播 PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); // 设置定时任务,每天的特定时间触发 long triggerTime = ...; // 设定触发时间,可以是一天的特定时间,比如早上8点 alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerTime, AlarmManager.INTERVAL_DAY, pendingIntent); } public static void cancelAlarm(Context context) { // 获取AlarmManager实例 AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); // 创建Intent,指定触发广播的Action Intent intent = new Intent(context, AlarmReceiver.class); intent.setAction("com.example.alarmdemo.ALARM_TRIGGERED"); // 创建PendingIntent,用于触发广播 PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); // 取消定时任务 alarmManager.cancel(pendingIntent); } } ``` 以上代码,setAlarm()方法用于设置定时任务,cancelAlarm()方法用于取消定时任务。我们需要创建一个BroadcastReceiver类AlarmReceiver,用来接收定时任务触发的广播,并执行相应操作。 这只是一个简单的AlarmManager示例,你可以根据自己的需求修改代码,实现更复杂的定时任务。 ### 回答2: AndroidAlarmManager是一个用于在指定时间间隔和时间点触发操作的类。它可以被用来定时执行某个任务、发送通知、或执行其他需要在特定时间发生的操作。下面是一个关于Android AlarmManager的简单演示: 首先,我们需要在AndroidManifest.xml文件添加权限: ``` <uses-permission android:name="com.android.alarm.permission.SET_ALARM" /> ``` 然后,在MainActivity创建AlarmManager对象和一个用于触发的PendingIntent对象: ``` AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(this, AlarmReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); ``` 接下来,可以使用下面的代码来设置一个简单的定时任务,比如每隔5秒触发一次: ``` Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.SECOND, 5); alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 5000, pendingIntent); ``` 这个意味着在当前时间的5秒后开始触发定时任务,并且每隔5秒再次触发。 最后,我们需要创建一个AlarmReceiver类来处理定时任务的触发事件。可以通过继承BroadcastReceiver类来实现,然后重写onReceive方法: ``` public class AlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 在这里可以执行你想要的操作,比如发送通知或执行任务 } } ``` 以上就是一个简单的Android AlarmManager的演示,通过设置定时任务来在指定时间间隔或时间点执行操作。可以根据实际需求来定制定时任务的触发时间和操作。 ### 回答3: Android AlarmManagerAndroid系统提供的一种用于管理定时任务的工具类。通过AlarmManager,我们可以实现在指定时间触发某个操作,比如发送通知、启动服务等。 下面是一个简单的Android AlarmManager示例: 1. 首先,需要在AndroidManifest.xml文件添加权限: ```xml <uses-permission android:name="android.permission.SET_ALARM"/> ``` 2. 在MainActivity.java文件,创建一个使用AlarmManager示例: ```java import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import java.util.Calendar; public class MainActivity extends AppCompatActivity { private AlarmManager alarmManager; private PendingIntent pendingIntent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取AlarmManager实例 alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); // 创建一个Intent,用于触发定时操作 Intent intent = new Intent(this, MyReceiver.class); pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); // 设置定时任务,这里设置的是每天早上8点触发 Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.HOUR_OF_DAY, 8); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); } } ``` 3. 创建一个广播接收器MyReceiver.java,在onReceive()方法定义定时任务触发后的操作: ```java import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 定时任务触发后的操作,这里简单地弹出一个Toast提示 Toast.makeText(context, "定时任务触发了", Toast.LENGTH_SHORT).show(); } } ``` 以上就是一个简单的Android AlarmManager示例。通过AlarmManager,我们可以方便地实现定时任务的管理和触发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值