1.⾸先我们的⽬的是长期监听时间变化,事实上应⽤程序退出。
通过了解我们知道注冊ACTION_TIME_TICK⼴播接收器能够监听系统事件改变,可是 查看SDK发现ACTION_TIME_TICK⼴播事件仅仅能动态注冊:
Broadcast Action: The current time has changed. Sent every minute. You can not receive this through components declared in manifests, only by exlicitly registering for it isterReceiver().
所以要想实现长期监听时间变化。就须要借助后台服务的帮助了 2.解决⽅法(3步骤):
(1)在某个时间启动后台服务
ample.broadcastreceiverofdatachange;
import android.os.Bundle;
import android.app.Activity;
t.Intent;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
背景音乐播放系统
tt27.tvsetContentView(R.layout.activity_main);
//启动后台服务
Intent service=new Intent(this, TimeService.class);
startService(service);
}
}
(2)在服务组件中动态注冊⼴播事件
ample.broadcastreceiverofdatachange;
import android.app.Service;
t.Intent;
t.IntentFilter;
import android.os.IBinder;
import android.util.Log;
public class TimeService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
Log.i("liujun", "后台进程被创建。
。。
");
电子放大镜//服务启动⼴播接收器,使得⼴播接收器能够在程序退出后在后天继续运⾏。接收系统时间变更⼴播事件DataChangeReceiver receiver=new DataChangeReceiver();激光标记
registerReceiver(receiver,new IntentFilter(Intent.ACTION_TIME_TICK));
}
@Override
有源噪声控制public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("liujun", "后台进程。。
。");
StartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Log.i("liujun", "后台进程被销毁了。。。
");
}
}
(3)在⼴播接收器组件中操作
ample.broadcastreceiverofdatachange;
t.BroadcastReceiver;
t.Context;
t.Intent;
import android.util.Log;
public class DataChangeReceiver extends BroadcastReceiver {
三苯基氢氧化锡
@Override
public void onReceive(Context context, Intent intent) {
Log.i("liujun", "时间发⽣变化。。。
");
}
}
//⾄此长期实现后台监听时间变化Demo就完毕了。
。。