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…

JavaScript将负数转换为正数

负负得正 .vue里的写法&#xff1a; <div v-if"num < 0">{{-(num)}}<div> <div v-if"num > 0">{{num}}<div> 使用过滤器&#xff1a; <div >{{num | absNum}}<div> filters: {absNum(value) {if(a < 0)…

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

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

方法覆盖(方法重写)

package com.qingfeng;/** * * author win7 * 功能&#xff1a;方法覆盖(方法重写):子类的某个方法覆盖父类的某个方法 */public class Demo3_8 { public static void main(String[] args) { // TODO Auto-generated method stub Animal animal1 new Animal…

webpack+vue实现项目

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

oracle数据库导入和导出

主机ip&#xff08;192.168.0.1&#xff09; 192.168.0.1 (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 192.168.0.1 )(PORT 1521)) ) (CONNECT_DATA (SERVICE_NAME TLPM) )) Oracle数据导入导出imp/exp 功能&#xff1a;Oracle数…

myysql 不能远程访问的解决办法

1.通过navicat或者命令行&#xff0c;将user表中原来hostlocalhost的改为host% 命令行方式&#xff1a; mysql> update user set host % where host localhost; 2.授权访问给root用户 mysql>grant all privileges on *.* to root% identified by password with grant op…

递归和非递归的区别

递归好处&#xff1a;代码更简洁清晰&#xff0c;可读性更好 递归可读性好这一点&#xff0c;对于初学者可能会反对。实际上递归的代码更清晰&#xff0c;但是从学习的角度要理解递归真正发生的什么&#xff0c;是如何调用的&#xff0c;调用层次和路线&#xff0c;调用堆栈中…

IOS背景半透明渐变问题

IOS背景半透明渐变问题 问题描述&#xff1a; 给一个层设置半透明的背景&#xff0c;使用 background:linear-gradient(to bottom, transparent, #ffffff)&#xff0c;其中使用transparent的时候 在安卓上显示正常&#xff08;白色半透明&#xff0c;但ios上显示透明渐变会出…

都客仿站系列教程四:javascript入门

javascript&#xff0c;和用户交互的东西。请看下面的例子&#xff1a; <script type"text/javascript">alert("ok"); </script>请参考http://wenku.baidu.com/view/7ee708c5d5bbfd0a7956732d.html 转载于:https://www.cnblogs.com/dukey/arch…

JAVA API

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

FusionCharts使用问题及解决方法(三)-FusionCharts常见问题大全

前两篇文章中&#xff0c;我们总结了FusionCharts图表的一些常见问题&#xff08;FAQ&#xff09;及解决方法&#xff0c;本文继续讨论FusionCharts使用者常见的一些复杂的报错及解决方法。 当HTML、SWF和JavaScript文件在同一个文件夹中时&#xff0c; FusionCharts工作正常&a…

图像PSNR值及MSE值的计算

% 图像峰值信噪比PSNR、均方根误差MSE % By lyqmath % Xidian University function [PSNR, MSE] psnr(X, Y) % 计算峰值信噪比PSNR、均方根误差MSE % 如果输入Y为空&#xff0c;则视为X与其本身来计算PSNR、MSEif nargin<2D X; elseif any(size(X)~size(Y))error(The inp…

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…

SpringMVC redirect中文乱码问题

在使用"redirect:xxx.do?param中文"时会出现乱码问题&#xff0c;解决方案如下&#xff1a; 使用model.addAttribute来替代直接拼接参数。如下&#xff1a; RequestMapping("t") public String t(String param, Model model) {model.addAttribute("p…

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

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

js RegExp正则表达式常见用例

js RegExp正则表达式常见用例判断输入是否为数字、字母、下划线组成判断字符串是否全部为字母判断字符串是否全部为数字判断是否带有小数判断是否中文名称组成判断手机号判断身份证判断验证码判断邮件地址是否合法判断是否是emoji表情获取字符长度&#xff0c;中文算2&#xff…

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

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

表达式与运算符

表达式与运算符 表达式 与数学中的定义相似&#xff0c;表达式是指具有一定的值的、用运算符把常数和变量连接起来的代数式。一个表达式可以只包含一个常数或一个变量。运算符可以是四则运算符、关系运算符、位运算符、逻辑运算符、复合运算符。下表将这些运算符从高优先级到低…