时间事件监听器

时间:2012-09-19 20:32:30

标签: android events time

我的问题:如何让我的应用程序在某个时间做某事?特别是在技术上不运行的情况下(可能)。最佳做法?事件听众?等...

扩展:我对Android开发很陌生。我想构建一个调度应用程序,它可以在预定的时间控制手机的某些功能。所以,假设我在应用程序中安排在3:00从振铃变为振动,现在是2:00。那么如何在3:00变为运行该变化时捕获系统时间?

我不确定是否有更多信息会有用。我只是在我真正开发它之前尝试设计它,所以我正在寻找最佳实践,以及当应用程序在后台运行或根本不运行时如何运行事件监听器(如果这是可能的。)

2 个答案:

答案 0 :(得分:5)

您可以pendingIntent使用BroadCastReceiver,如下所示:

Calendar cal = Calendar.getInstance();
Intent activate = new Intent(context, Alarm.class);
AlarmManager alarms ;
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, activate, 0);
alarms = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, minute);
cal.set(Calendar.SECOND, 00);
alarms.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), alarmIntent);

然后是BroadCast接收器:

public class Alarm extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
      MediaPlayer mp = MediaPlayer.create(context, R.raw.ferry_sound);
      mp.start();
      PowerManager pm = (PowerManager)     context.getSystemService(Context.POWER_SERVICE);
      PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
      wl.acquire();
      Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
      long[] s = { 0, 100, 10, 500, 10, 100, 0, 500, 10, 100, 10, 500 };
      vibrator.vibrate(s, -1);
   }
}

不要忘记在AndroidManifest.xml

中加入这些权限
....
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.VIBRATE"/>
....

并在应用程序标签中广播接收器:

<receiver  android:process=":remote" android:name="Alarm" />

答案 1 :(得分:0)

不要忘记权限:

    ....
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.VIBRATE"/>
    ....
    AND broadcast receiver in application tag:        
    <receiver android:process=":remote" android:name="Alarm" />
  ....

由于