Service关闭又自动启(AlarmManager、PendingIntent、BroadcastReceiver、Service).doc_第1页
Service关闭又自动启(AlarmManager、PendingIntent、BroadcastReceiver、Service).doc_第2页
Service关闭又自动启(AlarmManager、PendingIntent、BroadcastReceiver、Service).doc_第3页
Service关闭又自动启(AlarmManager、PendingIntent、BroadcastReceiver、Service).doc_第4页
Service关闭又自动启(AlarmManager、PendingIntent、BroadcastReceiver、Service).doc_第5页
免费预览已结束,剩余9页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Service关闭又自动启(AlarmManager、PendingIntent、BroadcastReceiver、 Service)首先要说的是,用户可能把这种做法视为流氓软件。大部分时候,程序员也不想把软件做成流氓软件,没办法,领导说了算。我们在使用某些 Android 应用的时候,可能会发现安装了某应用以后,会有一些服务也会随之运行。而且,这些服务每次都会随着手机开机而启动。有的服务做的更绝,当用户停止该服务器以后, 过了一段时间, 服务又自动运行了。 虽然,从用户的角度来说,这种方式比较流氓。但是,从程序员的角度来说,这是如何做到的呢?经过研究,我发现有一种方式是可以实现的。下面就和

2、大家分享。先简单介绍,一会儿会贴上全部代码。如何做到开机启动?这个比较简单,网上的资料够多,只要实现一个BroadcastReceiver,监听手机启动完成的事件ACTION_BOOT_COMPLETED即可。需要注意的是,好像不能用模拟器,要用手机测试。那如何做到启动一个 Service ,并且在用户关闭后能自动又启动了呢?一般的,都会在上面说到的 BroadcastReceiver 的实现里面,监听手机启动完成后, 启动一个 Service ,这是一般的做法。问题是,用户可以关闭掉该 Service 。那么怎样才能使它被关闭掉以后,再次启动呢?聪明的你一定立即就想到了,如果不直接启动Ser

3、vice ,而是启动一个timmer ,或者alarmManager,然后每隔一段时间去启动Service ,就可以了。还是看下面的全部代码吧,不过多解释了。这些代码中还是有不少概念的,不熟悉 AlarmManager 、PendingIntent 、 BroadcastReceiver 、Service 等等这些概念的同学可以百度一下。java view plaincopyprint?package com.arui.framework.android.daemonservice;import android.app.AlarmManager;import android.app.Pendi

4、ngIntent;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.SystemClock;public class BootBroadcast extends BroadcastReceiver Overridepublic void onReceive(Context context, Intent mintent)if(Intent.ACTION_BOOT_COMPLETED.equals(minte

5、nt.getAction() / 启动完成Intent intent = new Intent(context, Alarmreceiver.class);intent.setAction(arui.alarm.action);PendingIntent sender =PendingIntent.getBroadcast(context, 0,intent, 0);long firstime =SystemClock.elapsedRealtime();AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM

6、_SERVICE);/ 10 秒一个周期,不停的发送广播am.setRepeating(AlarmManager.ELAPSED_REALTIME_ WAKEUP, firstime,10 * 1000, sender); package com.arui.framework.android.daemonservice;import android.app.AlarmManager;import android.app.PendingIntent;import android.content.BroadcastReceiver; import android.content.Context;

7、import android.content.Intent;import android.os.SystemClock;public classBootBroadcast extends BroadcastReceiver Override public void onReceive(Context context, Intent mintent) if(Intent.ACTION_BOOT_COMPLETED.equals(mintent.getAction() / 启动完成Intent intent = new Intent(context, Alarmreceiver.class);in

8、tent.setAction(arui.alarm.action);PendingIntent sender =PendingIntent.getBroadcast(context, 0,intent, 0);long firstime = SystemClock.elapsedRealtime(); AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);/ 10 秒一个周期,不停的发送广播am.setRepeating(AlarmManager.ELAPSED_REALTIM E_WA

9、KEUP, firstime,10 * 1000, sender);java view plaincopyprint?package com.arui.framework.android.daemonservice;import android.content.BroadcastReceiver; import android.content.Context;import android.content.Intent;public class Alarmreceiver extends BroadcastReceiver Overridepublic void onReceive(Contex

10、t context, Intent intent) if (intent.getAction().equals(arui.alarm.action) Intent i = new Intent();i.setClass(context, DaemonService.class);/ 启动 service/ 多次调用 startService 并不会启动多个service而是会多次调用onStartcontext.startService(i); package com.arui.framework.android.daemonservice;import android.content.Bro

11、adcastReceiver;import android.content.Context;import android.content.Intent;public class Alarmreceiver extends BroadcastReceiver Overridepublic void onReceive(Context context, Intent intent) if (intent.getAction().equals(arui.alarm.action) Intent i = new Intent();i.setClass(context, DaemonService.cl

12、ass);/ 启动 service/ 多次调用 startService 并不会启动多个 service而是会多次调用onStartcontext.startService(i);java view plaincopyprint?package com.arui.framework.android.daemonservice;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.util.Log;public class DaemonService ex

13、tends Service Overridepublic IBinder onBind(Intent intent) return null;Overridepublic void onCreate() super.onCreate();Log.v(=, * DaemonService *:onCreate);Overridepublic void onStart(Intent intent, int startId) Log.v(=, * DaemonService *:onStart);/ 这里可以做Service 该做的事 package com.arui.framework.andro

14、id.daemonservice;import android.app.Service;import android.content.Intent; import android.os.IBinder;import android.util.Log;public class DaemonServiceextends Service Overridepublic IBinder onBind(Intent intent) return null;Overridepublic void onCreate() super.onCreate();Log.v(=, * DaemonService *:o

15、nCreate);Overridepublic void onStart(Intent intent, int startId) Log.v(=, * DaemonService *:onStart);/ 这里可以做Service 该做的事下面是 manifest 文件的代码。java view plaincopyprint?<receiverandroid:name=com.arui.framework.android.daemonservice.BootBroadcastandroid:permission=android.permission.RECEIVE_BOOT_COMPLE

16、TED><intent-filter><actionandroid:name=ent.action.BOOT_COMPLETED /></intent-filter></receiver><receiverandroid:name=com.arui.framework.android.daemonservice.Alarmreceiver ><intent-filter><action android:name=arui.alarm.action /> </intent-fil

17、ter></receiver><serviceandroid:name=com.arui.framework.android.daemonservice.DaemonService ></service><receiverandroid:name=com.arui.framework.android.daemonservice.BootBroadcastandroid:permission=android.permission.RECEIVE_BOOT_COMPLETED><intent-filter><actionandroid:name=ent.action.BOOT_COMPLETED /></intent-filter></receiver><receiverand

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论