【Android开机启动Activity或者Service方法】-阿里云开发者社区

开发者社区> 技术小胖子> 正文

【Android开机启动Activity或者Service方法】

简介:
+关注继续查看

这段时间在做Android的基础开发,现在有一需求是开机启动,按照网上某些博文教程做了下,始终不成功,一开机总是提示所启动的应用程序意外终止,于是参考了Android SDK doc,终于解决问题,下面把自己的经验分享给大家。

Android开机启动Activity或者Service方法

【原理】

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

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


  1. package com.billhoo.study; 
  2.  
  3. import android.app.Activity; 
  4. import android.os.Bundle; 
  5.  
  6. public class BootTestActivity extends Activity { 
  7.     /** Called when the activity is first created. */ 
  8.     @Override 
  9.     public void onCreate(Bundle savedInstanceState) { 
  10.         super.onCreate(savedInstanceState); 
  11.         setContentView(R.layout.main); 
  12.     } 

 

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

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


  1. package com.billhoo.study; 
  2.  
  3. import android.content.BroadcastReceiver; 
  4. import android.content.Context; 
  5. import android.content.Intent; 
  6.  
  7. public class BootCompletedReceiver extends BroadcastReceiver { 
  8.   @Override 
  9.   public void onReceive(Context context, Intent intent) { 
  10.     if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) 
  11.     { 
  12.       Intent newIntent = new Intent(context, BootTestActivity.class); 
  13.       newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  //注意,必须添加这个标记,否则启动会失败 
  14.       context.startActivity(newIntent);       
  15.     }       
  16.   } 

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


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

 

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


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

 

重启虚拟机,大功告成。

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


  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     package="com.billhoo.study" android:versionCode="1" 
  4.     android:versionName="1.0"> 
  5.     <uses-sdk android:minSdkVersion="4" /> 
  6.  
  7.     <!-- permissions --> 
  8.     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
  9.  
  10.     <application android:icon="@drawable/icon" android:label="@string/app_name"> 
  11.         <!-- activities --> 
  12.         <activity android:name=".BootTestActivity" android:label="@string/app_name"> 
  13.             <intent-filter> 
  14.                 <action android:name="android.intent.action.MAIN" /> 
  15.                 <category android:name="android.intent.category.LAUNCHER" /> 
  16.             </intent-filter> 
  17.         </activity> 
  18.  
  19.         <!-- receivers --> 
  20.         <receiver android:name=".BootCompletedReceiver"> 
  21.             <intent-filter> 
  22.                 <action android:name="android.intent.action.BOOT_COMPLETED" /> 
  23.             </intent-filter> 
  24.         </receiver> 
  25.  
  26.     </application> 
  27. </manifest> 

 


     本文转自Bill_Hoo 51CTO博客,原文链接:http://blog.51cto.com/billhoo/761230,如需转载请自行联系原作者







版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【转】android如何实现开机自动启动Service或app
1.今天我们主要来探讨android怎么让一个service开机自动启动功能的实现。Android手机在启动的过程中会触发一个Standard Broadcast Action,名字叫android.intent.action.BOOT_COMPLETED(记得只会触发一次呀),在这里我们可以通过构建一个广播接收者来接收这个这个action.下面我就来简单写以下实现的步骤: 2. 第一步:首先创建一个广播接收者,重构其抽象方法 onReceive(Context context, Intent intent),在其中启动你想要启动的Service或app。
911 0
android 判断service是否开启
引用:http://blog.csdn.net/ihrthk/article/details/7316389 [java] view plaincopyprint?   package com.
740 0
Windows 技术篇 - win10开机启动项设置方法,windows启动项里没有的程序设置开机启动方法
Windows 技术篇 - win10开机启动项设置方法,windows启动项里没有的程序设置开机启动方法
9 0
mac: vmware fusion中cent os启动假死的解决办法
环境: mac os X 10.9.2 + vmware 6.0.2 + cent OS 6.5 minimal 现象: Booting CentOS (2.6.32-358.e.l6.i686) in 0 seconds.
1255 0
[Android]从Launcher开始启动App流程源码分析
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5017056.html 从Launcher开始启动App流程源码分析 com.
613 0
[Android]Activity启动过程
Android系统启动加载流程: 参考图 Linux内核加载完毕 启动init进程 init进程fork出zygote进程 zygote进程在ZygoteInit.main()中进行初始化的时候fork出SystemServer进程 SystemServer进程开启的时候初始化Activit...
505 0
关于启动Activity之间的及普通按钮的点击事件
两个java文件 对应两个layout 主Activity通过按钮启动副Activity       副Activity通过多个按钮启动主Activity 主Acticity 1 package lianxi; 2 3 import com.
602 0
我要做 Android 第四弹 ps(Q:如何启动其他应用的Activity?)
一、打开第三方应用 (1) Intent intent=new Intent(); //包名 包名+类名(全路径) intent.
1273 0
21119
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载
《2021云上架构与运维峰会演讲合集》
立即下载