Android中让Service被关闭后再重新启动

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

---------------------------------------------------------------------------

转载:http://blog.csdn.net/arui319

---------------------------------------------------------------------------

如何做到开机启动?

          只要实现一个BroadcastReceiver,监听手机启动完成的事件ACTION_BOOT_COMPLETED即可。需要注意的是,好像不能用模拟器,要用手机测试。

那如何做到启动一个Service,并且在用户关闭后能自动又启动了呢?

             一般的,都会在上面说到的BroadcastReceiver的实现里面,监听手机启动完成后,启动一个Service,这是一般的做法。问题是,用户可以关闭掉该Service。那么怎样才能使它被关闭掉以后,再次启动呢?聪明的你一定立即就想到了,如果不直接启动Service,而是启动一个timmer,或者alarmManager,然后每隔一段时间去启动Service,就可以了。

[java] view plaincopyprint?

  1. package com.arui.framework.android.daemonservice;    

  2.     

  3. import android.app.AlarmManager;    

  4. import android.app.PendingIntent;    

  5. import android.content.BroadcastReceiver;    

  6. import android.content.Context;    

  7. import android.content.Intent;    

  8. import android.os.SystemClock;    

  9.     

  10. public class BootBroadcast extends BroadcastReceiver {    

  11.     

  12.     @Override    

  13.     public void onReceive(Context context, Intent mintent) {    

  14.     

  15.         if (Intent.ACTION_BOOT_COMPLETED.equals(mintent.getAction())) {    

  16.             // 启动完成    

  17.             Intent intent = new Intent(context, Alarmreceiver.class);    

  18.             intent.setAction("arui.alarm.action");    

  19.             PendingIntent sender = PendingIntent.getBroadcast(context, 0,    

  20.                     intent, 0);    

  21.             long firstime = SystemClock.elapsedRealtime();    

  22.             AlarmManager am = (AlarmManager) context    

  23.                     .getSystemService(Context.ALARM_SERVICE);    

  24.     

  25.             // 10秒一个周期,不停的发送广播    

  26.             am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime,    

  27.                     10 * 1000, sender);    

  28.         }    

  29.     

  30.     }    

  31. }   


[java] view plaincopyprint?

  1. package com.arui.framework.android.daemonservice;    

  2.     

  3. import android.content.BroadcastReceiver;    

  4. import android.content.Context;    

  5. import android.content.Intent;    

  6.     

  7. public class Alarmreceiver extends BroadcastReceiver {    

  8.     @Override    

  9.     public void onReceive(Context context, Intent intent) {    

  10.     

  11.         if (intent.getAction().equals("arui.alarm.action")) {    

  12.             Intent i = new Intent();    

  13.             i.setClass(context, DaemonService.class);    

  14.             // 启动service     

  15.             // 多次调用startService并不会启动多个service 而是会多次调用onStart    

  16.             context.startService(i);    

  17.         }    

  18.     }    

  19. }   

[java] view plaincopyprint?

  1. package com.arui.framework.android.daemonservice;    

  2.     

  3. import android.app.Service;    

  4. import android.content.Intent;    

  5. import android.os.IBinder;    

  6. import android.util.Log;    

  7.     

  8. public class DaemonService extends Service {    

  9.     

  10.     @Override    

  11.     public IBinder onBind(Intent intent) {    

  12.         return null;    

  13.     }    

  14.     

  15.     @Override    

  16.     public void onCreate() {    

  17.         super.onCreate();    

  18.         Log.v("=========""***** DaemonService *****: onCreate");    

  19.     }    

  20.     

  21.     @Override    

  22.     public void onStart(Intent intent, int startId) {    

  23.         Log.v("=========""***** DaemonService *****: onStart");    

  24.         // 这里可以做Service该做的事    

  25.     }    

  26. }    


[java] view plaincopyprint?

  1. <receiver     

  2.     android:name=" com.arui.framework.android.daemonservice.BootBroadcast"    

  3.     android:permission="android.permission.RECEIVE_BOOT_COMPLETED">    

  4.     <intent-filter>    

  5.         <action android:name="android.intent.action.BOOT_COMPLETED" />    

  6.     </intent-filter>    

  7. </receiver>    

  8. <receiver     

  9.     android:name=" com.arui.framework.android.daemonservice.Alarmreceiver" >    

  10.     <intent-filter>    

  11.         <action android:name="arui.alarm.action" />    

  12.     </intent-filter>    

  13. </receiver>    

  14.       <service    

  15.           android:name=" com.arui.framework.android.daemonservice.DaemonService" >    

  16.       </service>    


转载于:https://my.oschina.net/u/1777508/blog/308505

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CloudStack学习-3

此次试验主要是CloudStack结合openvswitch 背景介绍 之所以引入openswitch&#xff0c;是因为如果按照之前的方式&#xff0c;一个网桥占用一个vlan&#xff0c;假如一个zone有20个vlan&#xff0c;那么岂不是每个vlan都要创建一个桥&#xff0c;维护很麻烦 openvswitch是由Nic…

EIGRP中非等价负载均衡的实现

Eigrp为思科私有协议&#xff0c;其协议号为88&#xff0c;采用组播&#xff08;224.0.0.10&#xff09;和单播的方式发送路由更新&#xff0c;并且支持等价和非等价负载均衡。首先来看下Eigrp选择路由的过程&#xff1a;Eigrp中有三张表&#xff0c;分别为Eigrp邻居表、Eigrp拓…

webpack+vue实现项目

webpackvue实现TODO慕课网课程笔记 课程目的&#xff1a; 前端工程&#xff1a;讲明一些前端基础的概念&#xff1b;如何搭建一个工程&#xff0c;一个工程解决了哪些问题 webpack&#xff1a;预计未来前端开发必备的基础 vue&#xff1a;相对于react使用比较简单方便&#xf…

JAVA API

----API概念&#xff1a; API&#xff08;Application Programming Interface&#xff09;应用程序接口。 在Java中的API就是JDK中提供的各种功能。如CreateWindow就是一个API函数&#xff0c;在应用程序中如果要调用这个函数那么操作系统就会按该函数提供的参数信息产生一个相…

Javascript基础(二)

Javascript基础&#xff08;二&#xff09;事件&#xff1a;条件语句类型转换正则表达式regexp错误抛出void事件&#xff1a; 是发生在HTML元素上的行为&#xff0c;可以是浏览器行为&#xff0c;可以是用户行为 a) html 元素添加事件属性&#xff1a; <p οnclick alert…

网页字体设置你了解吗?

以前做项目的时候就依葫芦画瓢的设置 { font-family:arial,”microsoft yahei”,simsun,sans-self; } 等类似的字体&#xff0c;然而当更多的设备和系统出现后&#xff0c;以前这样的设置已不能满足网页在各设备上的显示需求。 就拿最简单的宋体(simsun)来说吧&#xff0c;在Wi…

设计模式笔记(7)---适配器模式(结构型)

Gof定义 将一个类的接口转换成客户所希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 动机 在软件系统中&#xff0c;由于应用环境的变化&#xff0c;常常要将“一些现存的对象”放在心的环境中应用&#xff0c;但是新环境要求的接口…

软件设计模式之适配器模式(JAVA)

什么是适配器模式&#xff1f; 在计算机编程中&#xff0c;适配器模式&#xff08;有时候也称包装样式或者包装&#xff09;将一个类的接口适配成用户所期待的。适配器能将因为接口不兼容而不能在一起工作的类工作在一起&#xff0c;做法是将类自己的接口包裹在一个已存在的类中…

Javascript 调试技巧

Javascript 调试技巧 在代码中寻找错误 1&#xff09;alert 方法&#xff1a; 弹框提示 2&#xff09;console 方法 在调试窗口上打印 JavaScript 值 3&#xff09;断点调试 在浏览器开发者工具中为JS代码添加断点&#xff0c;让JS执行到某一特定位置停住&#xff0c;方便…

WPF程序将DLL嵌入到EXE的两种方法

2019独角兽企业重金招聘Python工程师标准>>> WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是《Visual Studio 版本转换工具WPF版开源了》的续&#xff0c;关于《Visual Studio 版本转换工具WPF版开源了》可以参看地下地址&#xff08;两篇是一样的&#xff09;&…

华中地区高校第七届ACM程序设计大赛——之字形矩阵【2012年5月27日】

题意&#xff1a;输入a b Right 或 a b Down ,根据输入输出之字形路径的矩阵。 1 #include <stdio.h>2 int xx[4]{0,1,-1,1},yy[4]{1,0,1,-1};3 int map[100][100],col,row,x,y,dir,steps,idx;4 char sel[10];5 void nextdir()6 {7 switch(dir)8 {9 case 0: …

oracle文件

1、控制文件和日志文件 控制文件&#xff08;Control File&#xff09;是一个很小的二进制文件&#xff0c;用于描述和维护数据库的物理结构。在Oracle数据库中&#xff0c;控制文件相当重要&#xff0c;它存放有数据库中数据文件和日志文件的信息。Oracle数据库在启动时需要访…

常用命令-tar 加密

2019独角兽企业重金招聘Python工程师标准>>> 在当前目录下有一个pma目录的文件夹: 1、使用tar对文件压缩加密&#xff1a; # tar -zcvf - pma|openssl des3 -salt -k password | dd ofpma.des3 完成将得到一个pma.des3的打包文件&#xff0c;用你设置的密码替换pas…

ORM SQLAlchemy 简介

对象关系映射&#xff08;Object Relational Mapping&#xff0c;简称ORM使用DB-API访问数据库&#xff0c;需要懂 SQL 语言&#xff0c;能够写 SQL 语句&#xff0c;如果不想懂 SQL&#xff0c;又想使用关系型数据库&#xff0c;可以使用 ORM,一个 ORM , 它的一端连着 Databas…

转:OAUTH协议简介

OAUTH协议简介 原文链接 摘要&#xff1a;OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第 三方触及到用户的帐号信息&#xff08;如用户名与密码&#xff09;&#xff0c;即第三方无需使用用户的用户名与密…

java集合框架05——ArrayList和LinkedList的区别

前面已经学习完了List部分的源码&#xff0c;主要是ArrayList和LinkedList两部分内容&#xff0c;这一节主要总结下List部分的内容。 List概括 先来回顾一下List在Collection中的的框架图&#xff1a; 从图中我们可以看出&#xff1a; 1. List是一个接口&#xff0c;它继承与Co…

Javascript 函数详解

Javascript 函数详解 1&#xff09;函数声明&#xff1a; 通过关键字function定义&#xff0c;把函数作为变量来声明 函数声明后不会立即执行&#xff0c;会在我们需要的时候调用到。 <script>function myFunction(a, b) {return a * b;}// js对大小写敏感&#xff0c;…

ln链接使用

首先说明下Linux下删除、移动、复制的意义。删除:是将inode表放回空闲区由1变为0&#xff0c;还可以找回文件移动:是将inode表不变&#xff0c;将文件转移至对应条目&#xff0c;删除原条录。同分区上操作速度快&#xff0c;不同分区相当于创建、删除原文件复制:是重建inode表&…

Javascript 对象一(对象详解)

JS创建对象的几种方法1. Object 构造函数 创建 2. 对象字面量表示法 创建 3. 使用工厂模式创建对象 在 Car 函数中&#xff0c;返回的是一个对象。那么我们就无法判断返回的对象究竟是一个什么样的类型。于是就出现了第四种创建对象的模式 4. 使用构造函数创建对象 构造函数…

Delphi工具之Image Editor

Delphi Image Editor是一个工具&#xff0c;可用它来创建并编辑位图&#xff08;.bmp&#xff09;、图标&#xff08;.ico&#xff09;和光标&#xff08;.cur&#xff09;&#xff0c;还可以用它创建资源工程&#xff0c;将多个位图、图标和光标包含到单个资源文件&#xff08…