有些时候,我们的应用需要在开机的时候就自动运行,例如某个自动从网上更新内容的后台service。怎样实现开机自动运行应用呢?在撰写本文时,联想到高焕堂先生以“Don''t call me, I''ll call you back!”总结Android框架,真是说到点子上了。理解这句话的含义,许多有关Android平台上实现某种功能的问题,都能迎刃而解。
使用场景:手机开机后,自动运行程序,在屏幕上显示"Hello. I started!"字样。
背景知识:当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为android.intent.action.BOOT_COMPLETED。只要在我们的程序中“捕捉”到这个消息,再启动我们的程序即可。

记住,Android框架说:Don''t call me, I''ll call you back。我们要做的是做好接收这个消息的准备,而实现的手段就是实现一个BroadcastReceiver。

代码解析:
1、界面Activity:SayHello.java

import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class SayHello extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);TextView tv = new TextView(this);tv.setText("Hello. I started!");setContentView(tv);}}

这段代码很简单,当Activity启动时,创建一个TextView,用它显示"Hello. I started!"字样。

2、接收广播消息:BootBroadcastReceiver.java

import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class BootBroadcastReceiver extends BroadcastReceiver {static final String ACTION = "android.intent.action.BOOT_COMPLETED";@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals(ACTION)) {Intent sayHelloIntent = new Intent(context, SayHello.class);sayHelloIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(sayHelloIntent);}}}

该类派生自BroadcastReceiver,覆载方法onReceive中,检测接收到的Intent是否符合BOOT_COMPLETED,如果符合,则启动SayHello那个Activity。

3、配置文件:AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.ghstudio.BootStartDemo"    android:versionCode="1"    android:versionName="1.0" >    <application        android:icon="@drawable/icon"        android:label="@string/app_name" >        <activity            android:name=".SayHello"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <receiver android:name=".BootBroadcastReceiver" >            <intent-filter>                <action android:name="android.intent.action.BOOT_COMPLETED" />            </intent-filter>        </receiver>    </application>    <uses-sdk android:minSdkVersion="3" />    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" >    </uses-permission></manifest>

注意其中粗体字那一部分,该节点向系统注册了一个receiver,子节点intent-filter表示接收android.intent.action.BOOT_COMPLETED消息。不要忘记配置android.permission.RECEIVE_BOOT_COMPLETED权限。
完成后,编译出apk包,安装到模拟器或手机中,关机,重新开机,我们的应用也自动启动起来了。
如果是系统进程的话,需要加入init配置文件来启动,随着linux启动而启动


更多相关文章

  1. Android开发第1-1课:创建一个Android工程
  2. Android中创建自己的ContentProvider
  3. Android(安卓)应用程序
  4. Android(安卓)Manifest.xml里内容介绍
  5. android 以编码的方式列出来当前app所有的窗口
  6. (二)第一个Android程序 HelloWorld
  7. android面试
  8. Android中的服务(service)详解(一)
  9. android init进程分析 基本流程

随机推荐

  1. Android通过ContentProvider传输文件
  2. Android 旋转屏幕捕获当前屏幕的状态
  3. 解决Android编辑框在全屏模式下无法检测
  4. Android 重力感应获取手机运动方向和角度
  5. Windows环境下Android 源码模块下载
  6. android - mars课程列表
  7. 系出名门Android(8) - 控件(View)之TextS
  8. Android(安卓)调试神器-Stetho(Facebook
  9. Android中各种形状
  10. Android(安卓)彻底关闭WebView,防止WebVie