Android:侦听器,用于检测时钟中的微小变化

时间:2015-03-09 03:00:08

标签: android

我正在思考如何实现一个侦听器,以便在手机上的每一分钟都被检测到。

1)处理程序 2)AlarmManager 3)自己的线程事物

我希望我的应用程序能够在时钟每次更改时运行特定代码,在手机上分钟更改的同时触发非常重要,否则我只会使用等待60000的线程。

4 个答案:

答案 0 :(得分:6)

感谢Manpreet Singh的暗示,我能够提出以下建议:

BroadcastReceiver tickReceiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().compareTo(Intent.ACTION_TIME_TICK) == 0) {
            Log.v("Karl", "tick tock tick tock...");
        }
    }
};
registerReceiver(tickReceiver, new IntentFilter(Intent.ACTION_TIME_TICK)); // register the broadcast receiver to receive TIME_TICK

然后调用以下onStop():

// unregister broadcast receiver, will get an error otherwise
if(tickReceiver!=null) 
   unregisterReceiver(tickReceiver);

答案 1 :(得分:1)

假设方法initClock()更新了UI,那么我建议如下:

private BroadcastReceiver mTimeTickReceiver;

@Override
protected void onResume() {
    super.onResume();
    initClock();

    mTimeTickReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            initClock();
        }
    };
    registerReceiver(mTimeTickReceiver, new IntentFilter(Intent.ACTION_TIME_TICK));
}

@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(mTimeTickReceiver);
}

答案 2 :(得分:-1)

你可以在自己的线程中完成。它工作正常。我有和你一样的要求,我做了这个

Thread t = new Thread() {

  @Override
  public void run() {
    try {
      while (!isInterrupted()) {
        Thread.sleep(60000);
        runOnUiThread(new Runnable() {
          @Override
          public void run() {
            // updated my UI here 
          }
        });
      }
    } catch (InterruptedException e) {
    }
  }
};

t.start();

如果不是这样,您也可以使用Timertask对象。两者都工作正常

对于timertask,我猜这个链接会有所帮助

Android - Want app to perform tasks every second

答案 3 :(得分:-1)

创建一个接收器,如下面的

public class AlarmReceiver extends BroadcastReceiver  
{
    @Override
    public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    Log.e("alarmreceiver","called");

   }
}

在清单中注册

    <receiver android:name="AlarmReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

最后在活动中写下代码

        Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class);
        intent.setAction("packagename.ACTION");
        PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),
                    0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
                AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarm.cancel(pendingIntent);
        alarm.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000*60, pendingIntent);

就是这样,运行你的应用程序和日志将每分钟打印在logcat中