我正在思考如何实现一个侦听器,以便在手机上的每一分钟都被检测到。
1)处理程序 2)AlarmManager 3)自己的线程事物
我希望我的应用程序能够在时钟每次更改时运行特定代码,在手机上分钟更改的同时触发非常重要,否则我只会使用等待60000的线程。
答案 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,我猜这个链接会有所帮助
答案 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中