registerreceiver,registerreceiver方法

http://www.itjxue.com  2023-01-05 00:03  来源:未知  点击次数: 

如何让android的service一直在后台运行

Android的service一直运行的方法:1、 Intent.ACTION_TIME_TICK的使用我们知道广播的注册有静态注册和动态注册,但此系统广播只能通过动态注册的方式使用。即你不能通过在manifest.xml里注册的方式接收到这个广播,只能在代码里通过registerReceiver()方法注册。在ThisApp extends Application 里注册广播:IntentFilter filter = newIntentFilter(Intent.ACTION_TIME_TICK); MyBroadcastReceiver receiver = new MyBroadcastReceiver(); registerReceiver(receiver, filter); 在广播接收器MyBroadcastReceiver extends BroadcastReceiver的onReceive里if (intent.getAction().equals(Intent.ACTION_TIME_TICK)) { //检查Service状态 } 2、Service的检查与启动boolean isServiceRunning = false; ActivityManager manager = (ActivityManager)ThisApp.getContext().getSystemService(Context.ACTIVITY_SERVICE); for (RunningServiceInfo service :manager.getRunningServices(Integer.MAX_VALUE)) { if("so.xxxx.WidgetUpdateService".equals(service.service.getClassName())) //Service的类名 { isServiceRunning = true; } } if (!isServiceRunning) { Intent i = new Intent(context, WidgetUpdateService.class); context.startService(i); } 另一个话题,Service的开机启动。实现和上边的类似,也是通过监控开机的系统广播来启动Service。但其实你做了上边的检查也就不会做开机启动了,因为过一两分钟就会通过上边的程序启动Service了。代码如下:if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { Intent i = new Intent(context, LogService.class); context.startService(i); }

如何简单实现安卓app自动更新功能

app自动更新程序可以参考如下代码:

第一步 服务器端:

服务端提供一个借口,或者网址,我这里就用的服务器是tomcat,这里提供一个网址如下:

//也就是一个json数据接口

public static final String UPDATE_URL = "";

我们来看下json数据参数:

{

//app名字

appname: "爱新闻1.1",

//服务器版本号

serverVersion: "2",

//服务器标志

serverFlag: "1",

//是否强制更新

lastForce: "1",

//apk下载地址,这里我已经下载了官方的apk,放到了服务器里面

updateurl: "",

//版本的更新的描述

upgradeinfo: "V1.1版本更新,你想不想要试一下哈!!!"

}

好了以上的是服务器端的信息,在这里不需要多说了,我们来看下客户端的吧。

第二步 客户端需要实现:

首先我们要去解析服务端给的json,那么我们就要来创建一个model类了(代码过多,这里只有字段,getter和setter方法自己创建):

//app名字

private String appname;

//服务器版本

private String serverVersion;

//服务器标志

private String serverFlag;

//强制升级

private String lastForce;

//app最新版本地址

private String updateurl;

//升级信息

private String upgradeinfo;

在这里使用了一个辅助类,基本和model字段差不多:

public class UpdateInformation {

public static String appname = MyApplication.getInstance()

.getResources().getString(R.string.app_name);

public static int localVersion = 1;// 本地版本

public static String versionName = ""; // 本地版本名

public static int serverVersion = 1;// 服务器版本

public static int serverFlag = 0;// 服务器标志

public static int lastForce = 0;// 之前强制升级版本

public static String updateurl = "";// 升级包获取地址

public static String upgradeinfo = "";// 升级信息

public static String downloadDir = "wuyinlei";// 下载目录

}

我们知道,我们在进入app的时候,这个时候如果检测到服务器端有了新的版本,就回弹出提示框,提示我们更新。这个我们在MainActivity里面处理逻辑(onCreate()方法里面):

OkhttpManager.getAsync(Config.UPDATE_URL, new OkhttpManager.DataCallBack() {

@Override

public void requestFailure(Request request, Exception e) {

}

@Override

public void requestSuccess(String result) {

try {

Log.d("wuyiunlei",result);

JSONObject object = new JSONObject(result);

UpdateInfoModel model = new UpdateInfoModel();

model.setAppname(object.getString("appname"));

model.setLastForce(object.getString("lastForce"));

model.setServerFlag(object.getString("serverFlag"));

model.setServerVersion(object.getString("serverVersion"));

model.setUpdateurl(object.getString("updateurl"));

model.setUpgradeinfo(object.getString("upgradeinfo"));

tmpMap.put(DeliverConsts.KEY_APP_UPDATE, model);

} catch (JSONException e) {

e.printStackTrace();

}

//发送广播

sendBroadcast(new Intent(UpdateReceiver.UPDATE_ACTION));

}

});

当然了,我们也要注册和结束广播:

/**

* 广播注册

*/

private void registerBroadcast() {

mUpdateReceiver = new UpdateReceiver(false);

mIntentFilter = new IntentFilter(UpdateReceiver.UPDATE_ACTION);

this.registerReceiver(mUpdateReceiver, mIntentFilter);

}

/**

* 广播卸载

*/

private void unRegisterBroadcast() {

try {

this.unregisterReceiver(mUpdateReceiver);

} catch (Exception e) {

e.printStackTrace();

}

}

好了,接下来我们看下我们自定义的广播接收者UpdateReceiver .java:

/**

* 版本更新升级 广播接受者

*

*/

安卓文件可以删除吗?

可以删除,但是会重新生成的。

这个是系统的缓存文件,删了之后可能你存在手机上 的一些东西就不见了,里面一个是data文件及是存放数据的一个obb文件夹。

Android是一种基于Linux的自由及开放源代码的操作系统。

主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”。

Android操作系统最初由Andy Rubin开发,主要支持手机。

扩展资料:

系统结构:

Android 是运行于Linux kernel之上,但并不是GNU/Linux。因为在一般GNU/Linux 里支持的功能,Android 大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。

Android又以Bionic 取代Glibc、以Skia 取代Cairo、再以opencore取代FFmpeg等等。

Android 为了达到商业应用,必须移除被GNU GPL授权证所约束的部份,例如Android将驱动程序移到 Userspace,使得Linux driver 与 Linux kernel彻底分开。

Bionic/Libc/Kernel/ 并非标准的Kernel header files。Android 的 Kernel header 是利用工具由 Linux Kernel header 所产生的,这样做是为了保留常数、数据结构与宏。

Android 的 Linux kernel控制包括安全(Security),存储器管理(Memory Management),程序管理(Process Management),网络堆栈(Network Stack),驱动程序模型(Driver Model)等。

下载Android源码之前,先要安装其构建工具 Repo来初始化源码。Repo 是 Android 用来辅助Git工作的一个工具。

应用组件:

1、活动

Android 中,Activity是所有程序的根本,所有程序的流程都运行在Activity 之中,Activity可以算是开发者遇到的最频繁,也是Android 当中最基本的模块之一。

在Android的程序当中,Activity 一般代表手机屏幕的一屏。如果把手机比作一个浏览器,那么Activity就相当于一个网页

在Activity 当中可以添加一些Button、Check box 等控件。可以看到Activity 概念和网页的概念相当类似。

一般一个Android 应用是由多个Activity 组成的。这多个Activity 之间可以进行相互跳转,例如,按下一个Button按钮后,可能会跳转到其他的Activity。

和网页跳转稍微有些不一样的是,Activity 之间的跳转有可能返回值,例如,从Activity A 跳转到Activity B,那么当Activity B 运行结束的时候,有可能会给Activity A 一个返回值。这样做在很多时候是相当方便的。

当打开一个新的屏幕时,之前一个屏幕会被置为暂停状态,并且压入历史堆栈中。用户可以通过回退操作返回到以前打开过的屏幕。

可以选择性的移除一些没有必要保留的屏幕,因为Android会把每个应用的开始到当前的每个屏幕保存在堆栈中。

2、服务

Service 是android 系统中的一种组件,它跟Activity 的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互。

Service 是没有界面的长生命周期的代码。Service是一种程序,它可以运行很长时间,但是它却没有用户界面。这么说有点枯燥,来看个例子。

打开一个音乐播放器的程序,这个时候若想上网了,那么,打开Android浏览器,这个时候虽然已经进入了浏览器这个程序。

但是,歌曲播放并没有停止,而是在后台继续一首接着一首的播放。其实这个播放就是由播放音乐的Service进行控制。

当然这个播放音乐的Service也可以停止,例如,当播放列表里边的歌曲都结束,或者用户按下了停止音乐播放的快捷键等。

Service 可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD 卡上文件的变化,再或者在后台记录地理信息位置的改变等等,总之服务嘛,总是藏在后头的。

3、广播接收器

在Android 中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。

而BroadcastReceiver 是对发送出来的Broadcast进行过滤接受并响应的一类组件。

可以使用BroadcastReceiver 来让应用对一个外部的事件做出响应。这是非常有意思的,例如,当电话呼入这个外部事件到来的时候,可以利用BroadcastReceiver 进行处理。

例如,当下载一个程序成功完成的时候,仍然可以利用BroadcastReceiver 进行处理。

BroadcastReceiver不能生成UI,也就是说对于用户来说不是透明的,用户是看不到的。

BroadcastReceiver通过NotificationManager 来通知用户这些事情发生了。

BroadcastReceiver 既可以在AndroidManifest.xml 中注册,也可以在运行时的代码中使用Context.registerReceiver()进行注册。

只要是注册了,当事件来临的时候,即使程序没有启动,系统也在需要的时候启动程序。

各种应用还可以通过使用Context.sendBroadcast () 将它们自己的Intent Broadcasts广播给其他应用程序。

4、内容提供

Content Provider 是Android提供的第三方应用数据的访问方案。

在Android?[16]??中,对数据的保护是很严密的,除了放在SD卡中的数据,一个应用所持有的数据库、文件等内容,都是不允许其他直接访问的。

Android当然不会真的把每个应用都做成一座孤岛,它为所有应用都准备了一扇窗,这就是Content Provider。

应用想对外提供的数据,可以通过派生Content Provider类, 封装成一枚Content Provider,每个Content Provider都用一个uri作为独立的标识。

形如:content://com.xxxxx。所有东西看着像REST的样子,但实际上,它比REST 更为灵活。

和REST类似,uri也可以有两种类型,一种是带id的,另一种是列表的,但实现者不需要按照这个模式来做,给id的uri也可以返回列表类型的数据,只要调用者明白,就无妨,不用苛求所谓的REST。

参考资料来源:百度百科-Android

(责任编辑:IT教学网)

更多

推荐广告特效文章