当前位置: 编程技术>移动开发
本页文章导读:
▪PendingIntent跟Intent PendingIntent和Intent
Java代码 Notification n = new Notification(R.drawable.face_1, "Service启动" , System.currentTimeMillis()); PendingIntent contentIntent = PendingIntent.getActivity(this , 0 , new Intent( this , TServiceHol.........
▪ 大局定时器AlarmManager(2) 全局定时器AlarmManager(2)
在编写ChangeWallpaperService类时应注意如下3点:为了通过InputStream获得图像资源,需要将图像文件放在res\raw目录中,而不是res\drawable目录中。本例采用了循环更换壁.........
▪ 大局定时器AlarmManager(3) 全局定时器AlarmManager(3)
8.3.5 全局定时器AlarmManager(3)本例使用BroadcastReceiver来处理定时提醒任务。BroadcastReceiver类的代码如下:package net.blogjava.mobile; import java.util.Calendar; import andro.........
[1]PendingIntent跟Intent
来源: 互联网 发布时间: 2014-02-18
PendingIntent和Intent
Java代码
Notification n = new Notification(R.drawable.face_1, "Service启动" , System.currentTimeMillis());
PendingIntent contentIntent = PendingIntent.getActivity(this , 0 , new Intent( this , TServiceHolder. class ), 0 );
n.setLatestEventInfo(this , "任务标题" , "任务内容" , contentIntent);
nManager.notify(NOTIFICATION_ID, n); // 任务栏启动
Java代码
Notification n = new Notification(R.drawable.face_1, "Service启动", System.currentTimeMillis());
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, TServiceHolder.class), 0);
n.setLatestEventInfo(this, "任务标题", "任务内容", contentIntent);
nManager.notify(NOTIFICATION_ID, n); // 任务栏启动
Notification n = new Notification(R.drawable.face_1, "Service启动", System.currentTimeMillis());
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, TServiceHolder.class), 0);
n.setLatestEventInfo(this, "任务标题", "任务内容", contentIntent);
nManager.notify(NOTIFICATION_ID, n); // 任务栏启动PendingIntent和Intent的区别:An Intent is something that is used right now; a PendingIntent is something that may create an Intent in the future. You will use a PendingIntent with Notifications, AlarmManager, etc.
1. GSM网络中android发送短信示例
(1)代码节选
Java代码
String msg = "你好,美女" ;
String number = "135****6784" ;
SmsManager sms = SmsManager.getDefault();
PendingIntent pi = PendingIntent.getBroadcast(SmsActivity.this , 0 , new Intent(...), 0 );
sms.sendTextMessage(number, null , msg, pi, null );
Toast.makeText(SmsActivity.this , "发送成功" ,Toast.LENGHT_LONG).show();
Java代码
String msg ="你好,美女";
String number = "135****6784";
SmsManager sms = SmsManager.getDefault();
PendingIntent pi = PendingIntent.getBroadcast(SmsActivity.this,0,new Intent(...),0);
sms.sendTextMessage(number, null, msg, pi, null);
Toast.makeText(SmsActivity.this,"发送成功",Toast.LENGHT_LONG).show();
String msg ="你好,美女";
String number = "135****6784";
SmsManager sms = SmsManager.getDefault();
PendingIntent pi = PendingIntent.getBroadcast(SmsActivity.this,0,new Intent(...),0);
sms.sendTextMessage(number, null, msg, pi, null);
Toast.makeText(SmsActivity.this,"发送成功",Toast.LENGHT_LONG).show(); (2)代码解释
PendingIntent就是一个Intent的描述,我们可以把这个描述交给别的程序,别的程序根据这个描述在后面的别的时间做你安排做的事情 (By giving a PendingIntent to another application, you are granting it the right to perform the operation you have specified as if the other application was yourself,就相当于PendingIntent代表了Intent)。本例中别的程序就是发送短信的程序,短信发送成功后要把intent广播出去 。
函数SmsManager.sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)中参数解释:
1)PendingIntent sentIntent:当短信发出时,成功的话sendIntent会把其内部的描述的intent广播出去,否则产生错误代码并通过 android.app.PendingIntent.OnFinished进行回调,这个参数最好不为空,否则会存在资源浪费的潜在问题;
2)PendingIntent deliveryIntent:是当消息已经传递给收信人后所进行的PendingIntent广播。
查看PendingIntent 类可以看到许多的Send函数,就是PendingIntent在进行被赋予的相关的操作
Intent 是及时启动,intent 随所在的activity 消失而消失。
PendingIntent 可以看作是对intent的包装,通常通过getActivity,getBroadcast ,getService来得到pendingintent的实例,当前activity并不能马上启动它所包含的intent,而是在外部执行 pendingintent时,调用intent的。正由于pendingintent中 保存有当前App的Context,使它赋予外部App一种能力,使得外部App可以如同当前App一样的执行pendingintent里的 Intent, 就算在执行时当前App已经不存在了,也能通过存在pendingintent里的Context照样执行Intent。另外还可以处理intent执行后的操作。常和alermanger 和notificationmanager一起使用。
Intent一般是用作Activity、Sercvice、BroadcastReceiver之间传递数据,而Pendingintent,一般用在 Notification上,可以理解为延迟执行的intent,PendingIntent是对Intent一个包装。
Java代码
Notification n = new Notification(R.drawable.face_1, "Service启动" , System.currentTimeMillis());
PendingIntent contentIntent = PendingIntent.getActivity(this , 0 , new Intent( this , TServiceHolder. class ), 0 );
n.setLatestEventInfo(this , "任务标题" , "任务内容" , contentIntent);
nManager.notify(NOTIFICATION_ID, n); // 任务栏启动
Java代码
Notification n = new Notification(R.drawable.face_1, "Service启动", System.currentTimeMillis());
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, TServiceHolder.class), 0);
n.setLatestEventInfo(this, "任务标题", "任务内容", contentIntent);
nManager.notify(NOTIFICATION_ID, n); // 任务栏启动
Notification n = new Notification(R.drawable.face_1, "Service启动", System.currentTimeMillis());
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, TServiceHolder.class), 0);
n.setLatestEventInfo(this, "任务标题", "任务内容", contentIntent);
nManager.notify(NOTIFICATION_ID, n); // 任务栏启动PendingIntent和Intent的区别:An Intent is something that is used right now; a PendingIntent is something that may create an Intent in the future. You will use a PendingIntent with Notifications, AlarmManager, etc.
1. GSM网络中android发送短信示例
(1)代码节选
Java代码
String msg = "你好,美女" ;
String number = "135****6784" ;
SmsManager sms = SmsManager.getDefault();
PendingIntent pi = PendingIntent.getBroadcast(SmsActivity.this , 0 , new Intent(...), 0 );
sms.sendTextMessage(number, null , msg, pi, null );
Toast.makeText(SmsActivity.this , "发送成功" ,Toast.LENGHT_LONG).show();
Java代码
String msg ="你好,美女";
String number = "135****6784";
SmsManager sms = SmsManager.getDefault();
PendingIntent pi = PendingIntent.getBroadcast(SmsActivity.this,0,new Intent(...),0);
sms.sendTextMessage(number, null, msg, pi, null);
Toast.makeText(SmsActivity.this,"发送成功",Toast.LENGHT_LONG).show();
String msg ="你好,美女";
String number = "135****6784";
SmsManager sms = SmsManager.getDefault();
PendingIntent pi = PendingIntent.getBroadcast(SmsActivity.this,0,new Intent(...),0);
sms.sendTextMessage(number, null, msg, pi, null);
Toast.makeText(SmsActivity.this,"发送成功",Toast.LENGHT_LONG).show(); (2)代码解释
PendingIntent就是一个Intent的描述,我们可以把这个描述交给别的程序,别的程序根据这个描述在后面的别的时间做你安排做的事情 (By giving a PendingIntent to another application, you are granting it the right to perform the operation you have specified as if the other application was yourself,就相当于PendingIntent代表了Intent)。本例中别的程序就是发送短信的程序,短信发送成功后要把intent广播出去 。
函数SmsManager.sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)中参数解释:
1)PendingIntent sentIntent:当短信发出时,成功的话sendIntent会把其内部的描述的intent广播出去,否则产生错误代码并通过 android.app.PendingIntent.OnFinished进行回调,这个参数最好不为空,否则会存在资源浪费的潜在问题;
2)PendingIntent deliveryIntent:是当消息已经传递给收信人后所进行的PendingIntent广播。
查看PendingIntent 类可以看到许多的Send函数,就是PendingIntent在进行被赋予的相关的操作
Intent 是及时启动,intent 随所在的activity 消失而消失。
PendingIntent 可以看作是对intent的包装,通常通过getActivity,getBroadcast ,getService来得到pendingintent的实例,当前activity并不能马上启动它所包含的intent,而是在外部执行 pendingintent时,调用intent的。正由于pendingintent中 保存有当前App的Context,使它赋予外部App一种能力,使得外部App可以如同当前App一样的执行pendingintent里的 Intent, 就算在执行时当前App已经不存在了,也能通过存在pendingintent里的Context照样执行Intent。另外还可以处理intent执行后的操作。常和alermanger 和notificationmanager一起使用。
Intent一般是用作Activity、Sercvice、BroadcastReceiver之间传递数据,而Pendingintent,一般用在 Notification上,可以理解为延迟执行的intent,PendingIntent是对Intent一个包装。
[2] 大局定时器AlarmManager(2)
来源: 互联网 发布时间: 2014-02-18
全局定时器AlarmManager(2)
在编写ChangeWallpaperService类时应注意如下3点:
为了通过InputStream获得图像资源,需要将图像文件放在res\raw目录中,而不是res\drawable目录中。
本例采用了循环更换壁纸的方法。也就是说,共有5个图像文件,系统会从第1个图像文件开始更换,更换完第5个文件后,又从第1个文件开始更换。
更换壁纸需要使用Context.setWallpaper方法,该方法需要一个描述图像的InputStream对象。该对象通过getResources().openRawResource(...)方法获得。
在AndroidManifest.xml文件中配置ChangeWallpaperService类,代码如下:
<service android:name=".ChangeWallpaperService" />
最后来看一下本例的主程序(Main类),代码如下:
package net.blogjava.mobile;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class Main extends Activity implements OnClickListener
{
private Button btnStart;
private Button btnStop;
@Override
public void onClick(View view)
{
AlarmManager alarmManager = (AlarmManager)
getSystemService(Context.ALARM_SERVICE);
// 指定ChangeWallpaperService的PendingIntent对象
PendingIntent pendingIntent = PendingIntent.getService(this, 0,
new Intent(this, ChangeWallpaperService.class), 0);
switch (view.getId())
{
case R.id.btnStart:
// 开始每5秒更换一次壁纸
alarmManager.setRepeating(AlarmManager.RTC,
0, 5000, pendingIntent);
btnStart.setEnabled(false);
btnStop.setEnabled(true);
break;
case R.id.btnStop:
// 停止更换一次壁纸
alarmManager.cancel(pendingIntent);
btnStart.setEnabled(true);
btnStop.setEnabled(false);
break;
}
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnStart = (Button) findViewById(R.id.btnStart);
btnStop = (Button) findViewById(R.id.btnStop);
btnStop.setEnabled(false);
btnStart.setOnClickListener(this);
btnStop.setOnClickListener(this);
}
}
在编写上面代码时应注意如下3点:
在创建PendingIntent对象时指定了ChangeWallpaperService.class,这说明这个PendingIntent对象与ChangeWallpaperService绑定。AlarmManager在执行任务时会执行ChangeWallpaperService类中的onStart方法。
不要将任务代码写在onCreate方法中,因为onCreate方法只会执行一次,一旦服务被创建,该方法就不会被执行了,而onStart方法在每次访问服务时都会被调用。
获得指定Service的PendingIntent对象需要使用getService方法。在8.3.5节介绍过获得指定Activity的PendingIntent对象应使用getActivity方法。在实例51中将介绍使用getBroadcast方法获得指定BroadcastReceiver的PendingIntent对象。
实例51:多次定时提醒
工程目录:src\ch08\ch08_multialarm
在很多软件中都支持定时提醒功能,也就是说,事先设置未来的某个时间,当到这个时间后,系统会发出声音或进行其他的工作。本例中将实现这个功能。本例不仅可以设置定时提醒功能,而且支持设置多个时间点。运行本例后,单击【添加提醒时间】按钮,会弹出设置时间点的对话框,如图8.22所示。当设置完一系列的时间点后(如图8.23所示),如果到了某个时间点,系统就会播放一个声音文件以提醒用户。
下面先介绍一下定时提醒的原理。在添加时间点后,需要将所添加的时间点保存在文件或数据库中。本例使用SharedPreferences来保存时间点,key和value都是时间点。然后使用AlarmManager每隔1分钟扫描一次,在扫描过程中从文件获得当前时间(时:分)的value。如果成功获得value,则说明当前时间为时间点,需要播放声音文件,否则继续扫描。
在编写ChangeWallpaperService类时应注意如下3点:
为了通过InputStream获得图像资源,需要将图像文件放在res\raw目录中,而不是res\drawable目录中。
本例采用了循环更换壁纸的方法。也就是说,共有5个图像文件,系统会从第1个图像文件开始更换,更换完第5个文件后,又从第1个文件开始更换。
更换壁纸需要使用Context.setWallpaper方法,该方法需要一个描述图像的InputStream对象。该对象通过getResources().openRawResource(...)方法获得。
在AndroidManifest.xml文件中配置ChangeWallpaperService类,代码如下:
<service android:name=".ChangeWallpaperService" />
最后来看一下本例的主程序(Main类),代码如下:
package net.blogjava.mobile;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class Main extends Activity implements OnClickListener
{
private Button btnStart;
private Button btnStop;
@Override
public void onClick(View view)
{
AlarmManager alarmManager = (AlarmManager)
getSystemService(Context.ALARM_SERVICE);
// 指定ChangeWallpaperService的PendingIntent对象
PendingIntent pendingIntent = PendingIntent.getService(this, 0,
new Intent(this, ChangeWallpaperService.class), 0);
switch (view.getId())
{
case R.id.btnStart:
// 开始每5秒更换一次壁纸
alarmManager.setRepeating(AlarmManager.RTC,
0, 5000, pendingIntent);
btnStart.setEnabled(false);
btnStop.setEnabled(true);
break;
case R.id.btnStop:
// 停止更换一次壁纸
alarmManager.cancel(pendingIntent);
btnStart.setEnabled(true);
btnStop.setEnabled(false);
break;
}
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnStart = (Button) findViewById(R.id.btnStart);
btnStop = (Button) findViewById(R.id.btnStop);
btnStop.setEnabled(false);
btnStart.setOnClickListener(this);
btnStop.setOnClickListener(this);
}
}
在编写上面代码时应注意如下3点:
在创建PendingIntent对象时指定了ChangeWallpaperService.class,这说明这个PendingIntent对象与ChangeWallpaperService绑定。AlarmManager在执行任务时会执行ChangeWallpaperService类中的onStart方法。
不要将任务代码写在onCreate方法中,因为onCreate方法只会执行一次,一旦服务被创建,该方法就不会被执行了,而onStart方法在每次访问服务时都会被调用。
获得指定Service的PendingIntent对象需要使用getService方法。在8.3.5节介绍过获得指定Activity的PendingIntent对象应使用getActivity方法。在实例51中将介绍使用getBroadcast方法获得指定BroadcastReceiver的PendingIntent对象。
实例51:多次定时提醒
工程目录:src\ch08\ch08_multialarm
在很多软件中都支持定时提醒功能,也就是说,事先设置未来的某个时间,当到这个时间后,系统会发出声音或进行其他的工作。本例中将实现这个功能。本例不仅可以设置定时提醒功能,而且支持设置多个时间点。运行本例后,单击【添加提醒时间】按钮,会弹出设置时间点的对话框,如图8.22所示。当设置完一系列的时间点后(如图8.23所示),如果到了某个时间点,系统就会播放一个声音文件以提醒用户。
下面先介绍一下定时提醒的原理。在添加时间点后,需要将所添加的时间点保存在文件或数据库中。本例使用SharedPreferences来保存时间点,key和value都是时间点。然后使用AlarmManager每隔1分钟扫描一次,在扫描过程中从文件获得当前时间(时:分)的value。如果成功获得value,则说明当前时间为时间点,需要播放声音文件,否则继续扫描。
[3] 大局定时器AlarmManager(3)
来源: 互联网 发布时间: 2014-02-18
全局定时器AlarmManager(3)
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文件。
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文件。
最新技术文章: