我正在创建一个也具有闹钟功能的应用程序。它可以像我期望的那样工作。但只有当应用程序正在运行。如果我使用任务管理器关闭应用程序,则警报永不响。这是否意味着我必须创建一项服务?如果您使用BroadCast Receiver使用Alarm Manager,即使应用程序未在手机中运行,我也已经读过,您不需要服务。如果我错了,请纠正我。当应用程序关闭时运行报警
MainActivity
public class MainActivity extends Activity {
private AlarmManager manager;
private PendingIntent intent;
private AlarmManagerHelper alarm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
alarm=new AlarmManagerHelper();
}
@Override
protected void onStart() {
super.onStart();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void startRepeatingTimer(View view) {
Context context = this.getApplicationContext();
if(alarm != null){
alarm.setAlarms(context);
}else{
Toast.makeText(context, "Alarm is null", Toast.LENGTH_SHORT).show();
}
}
public void cancelRepeatingTimer(View view){
Context context = this.getApplicationContext();
if(alarm != null){
alarm.CancelAlarm(context);
}else{
Toast.makeText(context, "Alarm is null", Toast.LENGTH_SHORT).show();
}
}
public void onetimeTimer(View view){
Toast.makeText(this,"hello one time",Toast.LENGTH_SHORT).show();
Context context = this.getApplicationContext();
if(alarm != null){
alarm.setOnetimeTimer(context);
}else{
Toast.makeText(context, "Alarm is null", Toast.LENGTH_SHORT).show();
}
}
}
AlarmManager.java
public class AlarmManagerHelper extends BroadcastReceiver {
final public static String ONE_TIME = "onetime";
@Override
public void onReceive(Context context, Intent intent) {
PowerManager manager = (PowerManager) context.getSystemService(context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"mylock");
wakeLock.acquire();
Bundle extra = intent.getExtras();
StringBuilder msgStr = new StringBuilder();
if(extra!=null && extra.getBoolean(ONE_TIME, Boolean.FALSE)){
msgStr.append("One time Timer : ");
}
Format formatter = new SimpleDateFormat("hh:mm:ss");
msgStr.append(formatter.format(new Date()));
Toast.makeText(context, msgStr, Toast.LENGTH_LONG).show();
//Release the lock
wakeLock.release();
}
public void setAlarms(Context context) {
AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context,AlarmManagerHelper.class);
intent.putExtra(ONE_TIME,Boolean.FALSE);
PendingIntent it = PendingIntent.getBroadcast(context,0,intent,0);
manager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(), 1000 * 5 , it);
}
public void CancelAlarm(Context context)
{
Intent intent = new Intent(context, AlarmManagerHelper.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
}
public void setOnetimeTimer(Context context){
AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context,AlarmManagerHelper.class);
intent.putExtra(ONE_TIME,Boolean.TRUE);
PendingIntent it = PendingIntent.getBroadcast(context,0,intent,0);
manager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5000, it);
}
}
的AndroidManifest.xml
<receiver android:name="com.example.randomlocks.alarmdemo.AlarmManagerHelper"></receiver>
使用的服务,而不是广播接收器 –