两种方法: 1,在manifest中注册一个broadcastreceiver或, 在extends appliction中开启service

方法1的步骤如下:

今天我们主要来探讨android怎么让一个service开机自动启动功能的实现。Android手机在启动的过程中会触发一个Standard Broadcast Action,名字叫android.intent.action.BOOT_COMPLETED(记得只会触发一次呀),在这里我们可以通过构建一个广播接收者来接收这个这个action.下面我就来简单写以下实现的步骤:      第一步:首先创建一个广播接收者,重构其抽象方法 onReceive(Context context, Intent intent),在其中启动你想要启动的Service或app。    import android.content.BroadcastReceiver;      import android.content.Context;      import android.content.Intent;      import android.util.Log;            public class BootBroadcastReceiver extends BroadcastReceiver {          //重写onReceive方法          @Override          public void onReceive(Context context, Intent intent) {              //后边的XXX.class就是要启动的服务              Intent service = new Intent(context,XXXclass);              context.startService(service);              Log.v("TAG", "开机自动服务自动启动.....");             //启动应用,参数为需要自动启动的应用的包名    Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);    context.startActivity(intent );                }            }  第二步:配置xml文件,在receiver接收这种添加intent-filter配置       <receiver android:name="BootBroadcastReceiver">                  <intent-filter>                      <action android:name="android.intent.action.BOOT_COMPLETED"></action>                      <category android:name="android.intent.category.LAUNCHER" />                  </intent-filter>              </receiver>  第三步:添加权限 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />  



ZZZ:http://blog.csdn.net/www3300300/article/details/17075311

Android开机启动Activity或者Service方法

【原理】

当Android系统完成BOOT阶段之后,就会发送一条名为 ACTION_BOOT_COMPLETED 的广播,我们便可在一个BroadcastReceiver中捕获这条广播,然后启动我们的Activity或者Service,当然要注意的是,我们的application必须具有捕获该广播的权限,下面请看具体步骤:

【步骤一】首先要有一个用于开机启动的Activity或者Service,这里以系统自己创建的最简单的Activity为例进行讲解。

        
  1. packagecom.billhoo.study;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. publicclassBootTestActivityextendsActivity{
  5. /**Calledwhentheactivityisfirstcreated.*/
  6. @Override
  7. publicvoidonCreate(BundlesavedInstanceState){
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.main);
  10. }
  11. }

【步骤二】我们要编写一个BroadcastReceiver用以捕获ACTION_BOOT_COMPLETED这条广播,并在捕获之后启动我们要启动的Activity。

注意:必须在intent中添加Intent.FLAG_ACTIVITY_NEW_TASK标记,这就是我之前老是启动失败的原因。至于为什么,我还在研究SDK doc,明白了之后就回来补上。

        
  1. packagecom.billhoo.study;
  2. importandroid.content.BroadcastReceiver;
  3. importandroid.content.Context;
  4. importandroid.content.Intent;
  5. publicclassBootCompletedReceiverextendsBroadcastReceiver{
  6. @Override
  7. publicvoidonReceive(Contextcontext,Intentintent){
  8. if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED))
  9. {
  10. IntentnewIntent=newIntent(context,BootTestActivity.class);
  11. newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//注意,必须添加这个标记,否则启动会失败
  12. context.startActivity(newIntent);
  13. }
  14. }
  15. }

【步骤三】在AndroidManifest.xml配置文件中注册我们的BroadcastReceiver

        
  1. <receiverandroid:name=".BootCompletedReceiver">
  2. <intent-filter>
  3. <actionandroid:name="android.intent.action.BOOT_COMPLETED"/>
  4. </intent-filter>
  5. </receiver>

【步骤四】在AndroidManifest.xml配置文件中添加允许我们捕获该广播的权限

        
  1. <!--permissions-->
  2. <uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

重启虚拟机,大功告成。

下面附上完成的AndroidManifest.xml,以便大家理解参考

        
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <manifestxmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.billhoo.study"android:versionCode="1"
  4. android:versionName="1.0">
  5. <uses-sdkandroid:minSdkVersion="4"/>
  6. <!--permissions-->
  7. <uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
  8. <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
  9. <!--activities-->
  10. <activityandroid:name=".BootTestActivity"android:label="@string/app_name">
  11. <intent-filter>
  12. <actionandroid:name="android.intent.action.MAIN"/>
  13. <categoryandroid:name="android.intent.category.LAUNCHER"/>
  14. </intent-filter>
  15. </activity>
  16. <!--receivers-->
  17. <receiverandroid:name=".BootCompletedReceiver">
  18. <intent-filter>
  19. <actionandroid:name="android.intent.action.BOOT_COMPLETED"/>
  20. </intent-filter>
  21. </receiver>
  22. </application>
  23. </manifest>
另一篇: android一直保持运行:

Service组件在android开发中经常遇到,其经常作为后台服务,需要始终保持运行,负责处理一些必要(见不得人)的任务。而一些安全软件,如360等,会有结束进程的功能,如果不做Service的保持,就会被其杀掉。

如何保持Service的运行状态是现在要说明的,核心就是利用ANDROID的系统广播,这一不会被其他软件影响的常驻程序触发自己的程序检查Service的运行状态,如果被杀掉,就再起来。

我利用的系统广播是Intent.ACTION_TIME_TICK,这个广播每分钟发送一次,我们可以每分钟检查一次Service的运行状态,如果已经被结束了,就重新启动Service。

下边就是具体的代码和注意事项了:

1、 Intent.ACTION_TIME_TICK的使用

我们知道广播的注册有静态注册和动态注册,但此系统广播只能通过动态注册的方式使用。即你不能通过在manifest.xml里注册的方式接收到这个广播,只能在代码里通过registerReceiver()方法注册。

在ThisApp extends Application 里注册广播:

                
  1. IntentFilterfilter=newIntentFilter(Intent.ACTION_TIME_TICK);
  2. MyBroadcastReceiverreceiver=newMyBroadcastReceiver();
  3. registerReceiver(receiver,filter);

在广播接收器MyBroadcastReceiver extends BroadcastReceiver的onReceive里

                
  1. if(intent.getAction().equals(Intent.ACTION_TIME_TICK)){
  2. //检查Service状态
  3. }

2、Service的检查与启动

                
  1. booleanisServiceRunning=false;
  2. ActivityManagermanager=(ActivityManager)ThisApp.getContext().getSystemService(Context.ACTIVITY_SERVICE);
  3. for(RunningServiceInfoservice:manager.getRunningServices(Integer.MAX_VALUE)){
  4. if("so.xxxx.WidgetUpdateService".equals(service.service.getClassName()))
  5. //Service的类名
  6. {
  7. isServiceRunning=true;
  8. }
  9. }
  10. if(!isServiceRunning){
  11. Intenti=newIntent(context,WidgetUpdateService.class);
  12. context.startService(i);
  13. }

更多相关文章

  1. 【Parallax Animation】实现知乎 Android(安卓)客户端启动页视差
  2. Android(安卓)startService 启动自动解锁点亮屏幕
  3. Android之广播大全 Intent Action 事件
  4. android Notification 的使用!!!
  5. i.mx51开发板利用已有的镜像文件(SD卡启动)刷写Android
  6. android SystemUI 流程分析
  7. android之应用程序启动第三方应用
  8. 【3】Android新建Activity (Eclipse)
  9. 纯Java代码写登录注册页面

随机推荐

  1. Android(安卓)轻松实现语音识别
  2. 2018-2019-2 20189203 移动平台应用开发
  3. android本地后台服务示例
  4. 修正Android摄像头API
  5. Android(安卓)Uri命名格式
  6. Android基础 : Android(安卓)Service
  7. android 牛人必修 ant 编译android工程
  8. Android平台架构及特性
  9. android实现分享给好友功能
  10. ImageView属性相关