Android实现后台长期监听时间变化

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 with Context.registerReceiver().

所以要想实现长期监听时间变化。就须要借助后台服务的帮助了

2.解决方法(3步骤):

(1)在某个时间启动后台服务

package com.example.broadcastreceiverofdatachange;

import android.os.Bundle;

import android.app.Activity;

import android.content.Intent;

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//启动后台服务

Intent service=new Intent(this, TimeService.class);

startService(service);

}

}

(2)在服务组件中动态注冊广播事件

package com.example.broadcastreceiverofdatachange;

import android.app.Service;

import android.content.Intent;

import android.content.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() {

super.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", "后台进程。。

。");

return super.onStartCommand(intent, flags, startId);

}

@Override

public void onDestroy() {

Log.i("liujun", "后台进程被销毁了。。。

");

super.onDestroy();

}

}

(3)在广播接收器组件中操作

package com.example.broadcastreceiverofdatachange;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.util.Log;

public class DataChangeReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

Log.i("liujun", "时间发生变化。。。

");

}

}

//至此长期实现后台监听时间变化Demo就完毕了。

。。

时间: 2024-10-05 17:50:31

Android实现后台长期监听时间变化的相关文章

android动态注册监听网络变化异常

在使用广播接收器监听网络变化的时候,在AndroidManifest.xml中加入<user-permission android:name="android.permission.ACCESS_NETWOEK_STATE"/>还是无法启动应用程序,显示如下异常 07-06 00:03:22.568 22393-22393/? E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.lvkui.helloworld3, PI

关于Android中使用Uri监听数据库的变化

网上原创的关于监听数据库变化的文章很少,基本没找到有用的一篇,所以自己去看了一下蓝牙传输的源码,写了一个Demo,放在这里给大家参考一下,看源码: src里面有三个文件MyDataProvider.MainActivity和MyBean,看下面: MyDataProvider.java: public class MyDataProvider extends ContentProvider { // public static final String SCHEME = "test";

Android中检查、监听电量和充电状态的方法

Android中检查.监听电量和充电状态的方法 这篇文章主要介绍了Android中检查.监听电量和充电状态的方法,如判断当前充电状态.监听充电状态的改变.判断当前剩余电量等,需要的朋友可以参考下 当你在更改后台更新频率来减少这些更新对电池寿命的影响时,检查当前电量和充电状态是一个好的开始. 电池寿命通过剩余电量和充电状态来影响应用更新的执行.当用交流电充电时,执行更新操作对设备的影响是微不足道的,所以在大多数案例里,你可以把更新频率调到最快.如果设备不在充电,降低更新频率可以帮助延长电池寿命.

Android截屏事件监听

转载注明出处:http://blog.csdn.net/xiaohanluo/article/details/53737655 1. 前言 Android系统没有直接对截屏事件监听的接口,也没有广播,只能自己动手来丰衣足食,一般有三种方法. 利用FileObserver监听某个目录中资源变化情况 利用ContentObserver监听全部资源的变化 监听截屏快捷按键 由于厂商自定义Android系统的多样性,再加上快捷键的不同以及第三方应用,监听截屏快捷键这事基本不靠谱,可以直接忽略. 本文使用

赵雅智_ProviderContent监听数据变化

当程序A在执行insert.update.delete时,通过getContext().getContentResolver().notifyChange(uri, observer)方法来告诉所有注册在该Uri的监听者数据发生改变 参数1uri:注册的uri 参数2observer:注册的监听者 /** * 插入操作 */ @Override public Uri insert(Uri uri, ContentValues values) { if (uriMatcher.match(uri)

Android Back Home键监听

Android Back Home键监听 Back键的监听 对于Back键的监听比较容易,可以在多个系统回调处拦截,比如在activity的下列方法中都可以收到Back键按下的事件: @Override public void onBackPressed() { // super.onBackPressed();//注释掉这行,back键不退出activity Log.i(LOG_TAG, "onBackPressed"); } @Override public boolean dis

vue.js之过滤器,自定义指令,自定义键盘信息以及监听数据变化

一.监听数据变化 1.监听数据变化有两种,深度和浅度,形式如下: vm.$watch(name,fnCb); //浅度 vm.$watch(name,fnCb,{deep:true}); //深度监视 2.实例用法 2.1-1浅度监听:当点击页面,弹出发生变化了,a的值变为1,b的值变为101 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

mvc 缓存 sqlCacheDependency 监听数据变化

对于MVC有Control缓存和Action缓存. 一.Control缓存 Control缓存即是把缓存应用到整个Control上,该Control下的所有Action都会被缓存起来. [OutputCache(Duration = 10)] public class HomeController : Controller { // GET: Home public ActionResult Index() { ViewBag.CurrentTime = DateTime.Now; return

Angular.JS中使用$watch监听模型变化

$watch简单使用 $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. $watch(watchExpression, listener, objectEquality); 每个参数的说明如下: watchExpression:监听的对象,它可以是一个angular表达式如'name',或函数如function(){return $scope.name}. listener:当watchExpression变化时会被调用的函数或者表达式,它接收3个参数:n