Android实现开机自动运行程序2009-12-3115:01:17.0开机自动运行程序有些时候,应用需要在开机时就自动运行,例如某个自动从网上更新内容的后台service。怎样实现开机自动运行的应用?在撰写本文时,联想到高焕堂先生以“Don''tcallme,I''llcallyouback!”总结Android框架,真是说到点子上了。理解这句话的含义,许多有关Android平台上实现某种功能的问题,都能迎刃而解。

使用场景:手机开机后,自动运行程序,在屏幕上显示"Hello.Istarted!"字样。

背景知识:当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为android.intent.action.BOOT_COMPLETED。只要在程序中“捕捉”到这个消息,再启动之即可。记住,Android框架说:Don''tcallme,I''llcallyouback。我们要做的是做好接收这个消息的准备,而实现的手段就是实现一个BroadcastReceiver

代码解析:

1、界面ActivitySayHello.java

packagecom.ghstudio.BootStartDemo;

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.widget.TextView;

publicclassSayHelloextendsActivity{

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

TextViewtv=newTextView(this);

tv.setText("Hello.Istarted!");

setContentView(tv);

}

}

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

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

packagecom.ghstudio.BootStartDemo;

importandroid.content.BroadcastReceiver;

importandroid.content.Context;

importandroid.content.Intent;

publicclassBootBroadcastReceiverextendsBroadcastReceiver{

staticfinalStringACTION="android.intent.action.BOOT_COMPLETED";

@Override

publicvoidonReceive(Contextcontext,Intentintent){

if(intent.getAction().equals(ACTION)){

IntentsayHelloIntent=newIntent(context,SayHello.class);

sayHelloIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(sayHelloIntent);

}

}

}

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

3、配置文件:AndroidManifest.xml

<?xmlversion="1.0"encoding="utf-8"?>

<manifestxmlns:android="http://schemas.android.com/apk/res/android"

package="com.ghstudio.BootStartDemo"

android:versionCode="1"

android:versionName="1.0">

<applicationandroid:icon="@drawable/icon"android:label="@string/app_name">

<activityandroid:name=".SayHello"

android:label="@string/app_name">

<intent-filter>

<actionandroid:name="android.intent.action.MAIN"/>

<categoryandroid:name="android.intent.category.LAUNCHER"/>

</intent-filter>

</activity>

<receiverandroid:name=".BootBroadcastReceiver">

<intent-filter>

<actionandroid:name="android.intent.action.BOOT_COMPLETED"/>

</intent-filter>

</receiver>

</application>

<uses-sdkandroid:minSdkVersion="3"/>

<uses-permissionandroid: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启动而启动

注:还有一些关于Activity之间的数据传递与Intent的具体应用、Activity的生命周期等老师的PPT上已经都有了。具体的笔试题目前只有华为有笔试题,并且也只是一般的选择题,其余公司都是一些JAVA的基础题,只会在面试的时候问一些关于Android的题,并且有的公司经常问一些关于底层C库的调用与Android隐式API的题。

更多相关文章

  1. android service 通过broadcast通知Myreceiver 启动activity
  2. android使程序进程不被LMK杀死| application运行环境初始化
  3. 关于 onPause 和 onStop 的那些事
  4. Android(安卓)App设置成Launch
  5. Android实现应用开机自启动
  6. Android使用am命令实现拨打电话、打开应用
  7. Android(安卓)Zygote进程启动过程
  8. android init启动过程
  9. Android(安卓)启动过程框架

随机推荐

  1. 在Android中使用Google map
  2. Android Studio v0.1试用
  3. Android笔记(1)——不同apk之间传递参数与
  4. android关于快捷方式的检测和添加
  5. Android 中文 API (90) ―― WindowManag
  6. Android通知Notification详解
  7. GPS 研究一 (Android2.3)
  8. LeakCanary源码分析
  9. Android IMF 学习笔记三
  10. Android(安卓)camera ISP相关 术语解释(