此demo实现了一个闹铃,用AlarmManager对象设定闹铃,时间到了后,系统会调用设定好的BroadcastReceiver、Service或者Activity。
AlarmManager可以设置以下五种类型(demo中使用的第二种):
注意:此demo在原生Android系统上没问题,但在国内大多数定制机上,如果关闭后台,闹铃一般不会触发 ╮(╯_╰)╭
demo下载地址:http://download.csdn.net/detail/youmingyu/9715802
MainAvtivity:
package fk.androiddemo_030;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
Button setAlarmBut,cancelAlarmBut;
EditText keyEdit,timeEdit;
int alarmKey, alarmTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
keyEdit=(EditText)findViewById(R.id.keyEdit);
timeEdit=(EditText)findViewById(R.id.timeEdit);
setAlarmBut = (Button) findViewById(R.id.setAlarmBut);
setAlarmBut.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alarmKey=Integer.parseInt(keyEdit.getText().toString().trim());
alarmTime=Integer.parseInt(timeEdit.getText().toString().trim());
alarmTime=alarmTime*;//换成毫秒
Intent intent = new Intent(MainActivity.this, AlarmService.class);
//Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
intent.putExtra("alarmKey",alarmKey);
//PendingIntent还可以用getActivity()直接启动Activity
PendingIntent sender = PendingIntent.getService(MainActivity.this, alarmKey, intent, );
//PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this, alarmKey, intent, );
long firstTime = SystemClock.elapsedRealtime(); // 开机之后到现在的运行时间(包括睡眠时间)
firstTime += alarmTime;
// 进行闹铃注册
AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
//manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, , sender);//重复闹钟
manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, sender);
Toast.makeText(MainActivity.this, "设置"+alarmKey+"号闹铃", Toast.LENGTH_LONG).show();
//MainActivity.this.finish();
}
});
cancelAlarmBut = (Button) findViewById(R.id.cancelAlarmBut);
cancelAlarmBut.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alarmKey=Integer.parseInt(keyEdit.getText().toString().trim());
Intent intent = new Intent(MainActivity.this, AlarmService.class);
//Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
PendingIntent sender = PendingIntent.getService(MainActivity.this, alarmKey, intent, );
//PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this, alarmKey, intent, );
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.cancel(sender);// 取消闹铃
Toast.makeText(MainActivity.this, "取消"+alarmKey+"号闹铃", Toast.LENGTH_LONG).show();
//MainActivity.this.finish();
}
});
}
}
AlarmService:
package fk.androiddemo_030;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;
public class AlarmService extends Service {
public AlarmService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
int alarmKey=intent.getIntExtra("alarmKey",-);
Toast.makeText(ContextUtil.getInstance(), alarmKey+"号闹铃响了, 可以做点事情了~~AlarmService", Toast.LENGTH_LONG).show();
return super.onStartCommand(intent, flags, startId);
}
}
AlarmReceiver:
package fk.androiddemo_030;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class AlarmReceiver extends BroadcastReceiver {
public AlarmReceiver() {}
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
int alarmKey=intent.getIntExtra("alarmKey",-);
Toast.makeText(context, alarmKey+"号闹铃响了, 可以做点事情了~~AlarmReceiver", Toast.LENGTH_LONG).show();
}
}
运行截图: