8.3.5 全局定时器AlarmManager(3)
本例使用BroadcastReceiver来处理定时提醒任务。BroadcastReceiver类的代码如下:
package net.blogjava.mobile;
import java.util.Calendar;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.MediaPlayer;
public class AlarmReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
SharedPreferences sharedPreferences =
context.getSharedPreferences(
"alarm_record", Activity.MODE_PRIVATE);
String hour = String.valueOf(Calendar.
getInstance().get(Calendar.HOUR_OF_DAY));
String minute = String.valueOf(Calendar.
getInstance().get(Calendar.MINUTE));
// 从XML文件中获得描述当前时间点的value
String time = sharedPreferences.
getString(hour + ":" + minute, null);
if (time != null)
{
// 播放声音
MediaPlayer mediaPlayer =
MediaPlayer.create(context, R.raw.ring);
mediaPlayer.start();
}
}
}
配置AlarmReceiver类的代码如下:
<receiver android:name=".AlarmReceiver" android:enabled="true" />
在主程序中每添加一个时间点,就会在XML文件中保存所添加的时间点,代码如下:
package net.blogjava.mobile;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;
public class Main extends Activity implements OnClickListener
{
private TextView tvAlarmRecord;
private SharedPreferences sharedPreferences;
@Override
public void onClick(View v)
{
View view = getLayoutInflater().inflate(R.layout.alarm, null);
final TimePicker timePicker = (TimePicker)
view.findViewById(R.id.timepicker);
timePicker.setIs24HourView(true);
// 显示设置时间点的对话框
new AlertDialog.Builder(this).setTitle("设置提醒时间").setView(view)
.setPositiveButton("确定", new
DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
String timeStr = String.valueOf(timePicker
.getCurrentHour()) + ":"
+ String.valueOf
(timePicker.getCurrentMinute());
// 将时间点添加到TextView组件中
tvAlarmRecord.setText
(tvAlarmRecord.getText().toString() + "\n" + timeStr);
// 保存时间点
sharedPreferences.edit().
putString(timeStr, timeStr).commit();
}
}).setNegativeButton("取消", null).show();
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btnAddAlarm = (Button) findViewById(R.id.btnAddAlarm);
tvAlarmRecord = (TextView) findViewById(R.id.tvAlarmRecord);
btnAddAlarm.setOnClickListener(this);
sharedPreferences = getSharedPreferences("alarm_record",
Activity.MODE_PRIVATE);
AlarmManager alarmManager = (AlarmManager)
getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);
// 创建封装BroadcastReceiver的pendingIntent对象
PendingIntent pendingIntent = PendingIntent.
getBroadcast(this, 0,intent, 0);
// 开始定时器,每1分钟执行一次
alarmManager.setRepeating(AlarmManager.RTC,
0, 60 * 1000, pendingIntent);
}
}
在使用本例添加若干个时间点后,会在alarm_record.xml文件中看到类似下面的内容:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="18:52">18:52</string>
<string name="20:16">20:16</string>
<string name="19:11">19:11</string>
<string name="19:58">19:58</string>
<string name="22:51">22:51</string>
<string name="22:10">22:10</string>
<string name="22:11">22:11</string>
<string name="20:10">20:10</string>
</map>
上面每个<string>元素都是一个时间点,定时器将每隔1分钟查一次alarm_record.xml文件。
分享到:
相关推荐
全局定时器AlarmManager是Android系统中的一个重要组件,用于在特定的时间点或按照预定的时间间隔触发事件。这个功能在很多场景下都非常有用,例如定期更新应用数据、执行后台任务或者如描述中提到的定时更换壁纸。...
8.3.5 全局定时器AlarmManager(2) 8.3.5 全局定时器AlarmManager(3) 8.4.1 什么是AIDL服务 8.4.2 建立AIDL服务的步骤(1) 8.4.2 建立AIDL服务的步骤(2) 8.4.2 建立AIDL服务的步骤
3. uni-app定时器的注意事项: - 在页面卸载时,记得清除定时器,避免内存泄漏。通常在`onUnload`或`beforeDestroy`生命周期钩子中执行。 - 定时器在不同平台可能存在差异,比如小程序环境可能会因为网络状态、...
比较常用的是AlarmManager全局定时器 去实现。 AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟。其实它的作用和Timer有点相似。都有两种相似的用法:(1)在指定时长后执行某项操作(2)周期性的执行...
AlarmManager实质是一个全局的定时器,是Android中常用的一种系统级别的提示服务,在指定时间或周期性启动其它组件(包括Activity,Service,BroadcastReceiver)。本文将讲解一下如何使用AlarmManager实现定时提醒...
3. **AlarmManager**:对于需要在特定时间(比如每天的某个时刻)或者间隔较长的时间执行的任务,AlarmManager是最佳选择。它可以触发BroadcastReceiver,即使应用不在运行状态下也能唤醒设备执行任务。AlarmManager...
首先,AlarmManager实际上是一个全局的定时器,它的主要功能是设置在未来某一时间点或按照一定周期执行特定任务。它具有系统级别的特性,即使设备在休眠状态下,设定的闹钟依然可以唤醒设备执行任务。当然,如果设置...
8.3.5 全局定时器AlarmManager AlarmManager服务可以设置全局定时任务,即使应用退出,也能在预定时间触发广播或启动Service。 8.4.1 什么是AIDL服务 Android Interface Definition Language (AIDL)用于跨进程通信...
8.3.5 全局定时器 AlarmManager AlarmManager是全局定时服务,可以设置一次性或周期性的定时任务。它可以在设备休眠时仍然触发,适合用于长时间间隔的定时任务。 8.4 AIDL服务 8.4.1 什么是AIDL服务 Android ...
**8.3.5 全局定时器AlarmManager** AlarmManager是Android提供的全局定时服务,可以设置一次性或周期性的定时任务,即使应用被关闭,依然能够按照设定的时间触发事件。 **8.4.1 什么是AIDL服务** AIDL(Android ...
这个服务非常适合用来创建闹钟应用,或者作为全局定时器来实现后台任务的调度。在本文中,我们将深入探讨`AlarmManager`的工作原理、使用方法以及相关知识点。 ### 1. `AlarmManager`简介 `AlarmManager`是Android ...
**8.3.5 全局定时器AlarmManager** `AlarmManager`用于设置一次性或周期性的定时任务,例如定时提醒用户。 - **创建AlarmManager** ```java AlarmManager alarmManager = (AlarmManager) getSystemService...
3. 视频播放: 使用`ExoPlayer`播放视频,需要创建`ExoPlayer`实例,设置视频源(如URL或本地文件路径),并调用`playWhenReady`属性来控制播放。`setLooping(true)`可以让视频循环播放。此外,`ExoPlayer`还提供了...
`CHANGE_NETWORK_STATE`允许应用程序更改网络连接状态,而`WRITE_SETTINGS`则允许应用程序更改全局系统设置,包括开启飞行模式。 接下来,我们需要使用AlarmManager服务来设定定时任务。AlarmManager是Android提供...
AlarmManager通常用来开发手机闹钟,并且它是一个全局定时器,可在指定时间或指定周期启动其他组件(包括Activity,Service,BroadcastReceiver) 获取AlarmManager对象: getSystemService(Service.ALARM_SERVICE) 调用...