- 浏览: 123850 次
文章分类
- 全部博客 (121)
- confluence (1)
- android (77)
- PHP (6)
- java (21)
- mysql (3)
- dos (1)
- 传感器 (2)
- 获取电话薄信息 (3)
- 正则表达式 (1)
- 网络 (1)
- 蓝牙 (1)
- 图片 (4)
- intent (3)
- 注意 (1)
- eclipce (1)
- plugins (1)
- dialog (4)
- zip (1)
- sd卡 (1)
- ui (1)
- Camera (1)
- draw (1)
- activity (2)
- launchMode (1)
- 安全 (1)
- Button (1)
- ImageTextButton (1)
- paint (1)
- network (1)
- popupwindow (1)
- jquery (1)
- ant (1)
- notifaction (1)
- Rating (1)
- ListView (3)
- editText (1)
- doc (1)
- jdk (1)
- animation (1)
- sign (1)
- 签名 (1)
- 广播 (1)
- textview (4)
- 删除线 (1)
- 城市列表 (1)
- IDE (1)
- Eclipse (1)
- pixels (2)
- px (1)
- 静默安装 (1)
- Android截屏 (1)
- eclipcetheme (1)
- scroll (1)
- ActivityGroup (1)
- sqlite (1)
- webview (3)
- PullToRefreshListView (1)
- cache (1)
- java引用 (1)
- 命名空间 (1)
- httpClient (1)
- 开源控件 (0)
- sms (1)
- 文字水平滚动 (1)
- 正则 (1)
- 理论知识 (1)
- 属性 (0)
- openfire (1)
- 面试 (1)
- 继承的优缺点 (1)
- PowerDesigner (1)
- 数字格式化 (1)
- andriod (1)
- webservice (1)
- 记录 (0)
- share (0)
- 开源 (1)
最新评论
首先要说的是,用户可能把这种做法视为流氓软件。大部分时候,程序员也不想把软件做成流氓软件,没办法,领导说了算。
我们在使用某些Android应用的时候,可能会发现安装了某应用以后,会有一些服务也会随之运行。而且,这些服务每次都会随着手机开机而启动。有的服务做的更绝,当用户停止该服务器以后,过了一段时间,服务又自动运行了。虽然,从用户的角度来说,这种方式比较流氓。但是,从程序员的角度来说,这是如何做到的呢?经过研究,我发现有一种方式是可以实现的。下面就和大家分享。
先简单介绍,一会儿会贴上全部代码。
如何做到开机启动?
这个比较简单,网上的资料够多,只要实现一个BroadcastReceiver,监听手机启动完成的事件ACTION_BOOT_COMPLETED即可。需要注意的是,好像不能用模拟器,要用手机测试。
那如何做到启动一个Service,并且在用户关闭后能自动又启动了呢?
一般的,都会在上面说到的BroadcastReceiver的实现里面,监听手机启动完成后,启动一个Service,这是一般的做法。问题是,用户可以关闭掉该Service。那么怎样才能使它被关闭掉以后,再次启动呢?聪明的你一定立即就想到了,如果不直接启动Service,而是启动一个timmer,或者alarmManager,然后每隔一段时间去启动Service,就可以了。
还是看下面的全部代码吧,不过多解释了。这些代码中还是有不少概念的,不熟悉AlarmManager、PendingIntent、BroadcastReceiver、Service等等这些概念的同学可以看下 http://www.linuxidc.com/topicnews.aspx?tid=11 。
package com.arui.framework.android.daemonservice;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.SystemClock;
public class BootBroadcast 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);
intent.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_REALTIME_WAKEUP, firstime,
10 * 1000, sender);
}
}
}
package com.arui.framework.android.daemonservice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class Alarmreceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("arui.alarm.action")) {
Intent i = new Intent();
i.setClass(context, DaemonService.class);
// 启动service
// 多次调用startService并不会启动多个service 而是会多次调用onStart
context.startService(i);
}
}
}
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 extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.v("=========", "***** DaemonService *****: onCreate");
}
@Override
public void onStart(Intent intent, int startId) {
Log.v("=========", "***** DaemonService *****: onStart");
// 这里可以做Service该做的事
}
}
下面是manifest文件的代码。
<receiver
android:name=" com.arui.framework.android.daemonservice.BootBroadcast"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<receiver
android:name=" com.arui.framework.android.daemonservice.Alarmreceiver" >
<intent-filter>
<action android:name="arui.alarm.action" />
</intent-filter>
</receiver>
<service
android:name=" com.arui.framework.android.daemonservice.DaemonService" >
</service>
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2012-01/51923.htm
发表评论
-
使用Android进行分享
2014-04-21 14:22 01.简单的分享文本 Intent sendIntent = ... -
android:descendantFocusability用法简析
2013-11-25 10:11 0开发中很常见的一个问题,项目中的listview不 ... -
Android 的应用程序的优先级和进程状态
2013-11-04 12:29 2208回收资源的时候,进 ... -
去掉listview顶部和底部阴影(高光部分)
2013-11-13 11:04 659/** * 去掉listview顶部和底部阴影(高光 ... -
Android的5个进程等级 .
2013-10-22 17:00 662来自:http://blog.csdn.net/ ... -
使用TextView 使用文字水平滚动
2013-09-26 15:12 617/** * * <b>功能名:< ... -
SMS研究(转)记录地址
2013-09-22 15:20 695拦截短信 作者:bingzhi更新于 07月26日访问(70 ... -
ListView 隐藏滚动条及基本属性
2013-09-09 22:25 1218由于这两天在做listView的东西,所以整理出来一些我个 ... -
android 编辑框过滤文本
2013-09-05 13:48 525public class EditOnKeyListener ... -
HttpClient The target server failed to respond
2013-09-04 17:50 14737关于HttpClient 出现 The target ser ... -
android webview的三种加载方式
2013-08-28 17:20 537//打开本包内asset目录下的index.html文件 ... -
TextView的一些高级显示
2013-08-20 10:41 3911. 自定义字体可 ... -
命名空间
2013-08-19 18:18 7301.需要在AndroidManifest.xml添加自己的 ... -
java 4种引用
2013-08-16 09:20 6931.强引用本章前文介绍的引用实际上都是强引用,这是使用最普遍 ... -
清除 webView 存在的缓存!
2013-08-15 17:27 745CookieSyncManager.createInstan ... -
使用 PullToRefreshListView 分页问题.
2013-08-15 12:05 2251使用PullToRefreshListView分页刷新问题, ... -
清除webview产生的缓存
2013-08-15 10:03 1506/** * 删除应用缓存(/data/data/包名/ ... -
读取assets或者raw目录下的sqlite数据库
2013-08-14 17:46 963public class DbManager { pr ... -
使用 ActivityGroup 加载多个Activity
2013-08-14 15:13 6621.mTabClassArray 数组中存放的是Activi ... -
监听 ScrollView 滑动到底部
2013-08-13 15:52 9041.给ScrollView添加 OnTouchListene ...
相关推荐
android与后台交互demo。后台平台由structs hibernate搭建。运行成功。
Android 后台运行 定时器 AlarmManager Service
Android后台保持运行,开机后自动启动设定好的APK的DEMO.zip
资源中有个MyCamera1Demo.apk可以直接安装运行,MyCamera1Demo.zip是Demo源码。 具体详见我的博客 : https://blog.csdn.net/EthanCo/article/details/132651833 使用的Android Studio版本是Android Studio Giraffe |...
安卓Android源码——后台保持运行,开机后自动启动设定好的APK的DEMO.zip
这是一个demo,实现了安卓客服端和struts后台的交互,用json传输数据,是一个简单的例子,struts+hibernate+spring+Android;非常适合新手入门。
安卓Android源码——后台保持运行,开机后自动启动设定好的APK的DEMO.rar
后台保持运行开机后自动启动设定好的APK的DEMO.zip
获取Android后台进程,支持低版本和高版本获取后台运行进程方法,此demo仅供大家学习参考,希望对各位有所帮助。
Android高级应用源码-后台保持运行,开机后自动启动设定好的APK的DEMO.zip
Android 仿QQ后台运行时收到推送消息 在顶部弹出 源码,用到类似 Heads-up 组件的库。
Android应用源码开发Demo,主要用于毕业设计学习。
Android应用程序开发,8个后台服务相关Demo学习代码;适合刚开始学习Android的Service和Thread的新手
首先说明一下这个demo完全按着做项目的思路进行的,只要放上后台给的订单参数就可以运行。如果是要支付宝运行的demo就不要看了。
让app一直运行在后台且可以播放有声音乐Demo
在Camera2官方Demo的基础上修改,采用IntentService后台运行,实现定时无预览拍照。
JAVA 版安卓服务后台运行 DEMO 仅供参考 AndroidDaemonService.zip
下载或clone SDK开发包,可运行Demo程序。 运行后,首先点击“用户授权”,就取到了令牌以及绑定设备信息,即可调试demo。 ###调测、账号注意事项 [测试环境]和[线上环境]的账号、数据完全独立,交叉登录则会报密码...
1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合...