有些时候,应用需要在开机时就自动运行,例如某个自动从网上更新内容的后台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

package com.ghstudio.BootStartDemo; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class SayHello extends Activity { @Override public 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

package com.ghstudio.BootStartDemo; 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"; @Override public 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包,安装到模拟器或手机中。关机,重新开机。

运行截图:

延伸思考:在多数情况下,要自动运行的不是有界面的程序,而是在后台运行的service。此时,就要用startService来启动相应的service了。

Android实现开机自动运行程序相关推荐

  1. 开机自动运行程序怎么关闭

    开机自动运行程序怎么关闭 开机自启动程序关闭方法图解 作者:佚名  字体:[增加 减小] 来源:互联网 时间:06-12 17:25:04 我要评论 一大堆开机自动启动的软件导致系统巨慢,比如说刚开机 ...

  2. 计算机程序怎么开机自动启动,开机自动运行程序怎么关闭 开机自启动程序关闭方法图解...

    有的朋友在使用电脑的时候总是需要安装一些软件,但对于如今的电脑软件,多数属于流氓性质,对于小白朋友安装一个软件,可能会同时安装多个软件,这就容易造成开机自动启动的行为,尤其是本来电脑配置就不高,还弄了 ...

  3. /etc/rc.local 与 /etc/init.d Linux 开机自动运行程序

    1. /etc/rc.local 这是使用者自订开机启动程序,把需要开机自动运行的程序写在这个脚本里 --------引用---------------------- 在完成 run level 3 ...

  4. wince6.0桌面背景+设置默认IP+开机自动运行程序

    前几天一直很苦恼,找不到方法,恨不得把自己扔到大海里去. 没想到,星星之火真可以燎原,因为一点小地方想明白了,接下来的问题全都迎刃而解. 做个小小的总结吧. 1.桌面背景的切换,要修改shell.bi ...

  5. android开机自动运行程序

    背景知识:当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为 android.intent.action.BOOT_COMPLETED. ...

  6. CentOS开机自动运行程序的脚本

    有些时候我们需要在服务器里设置一个脚本,让他一开机就自己启动.方法如下: cd /etc/init.d vi youshell.sh #将youshell.sh修改为你自己的脚本名 编写自己的脚本后保 ...

  7. AIX 开机自动运行程序

    开机启动程序的方法有很多,我只谈谈思路,然后给出一些解决方法. AIX系统启动过程,我们知道AIX系统在启动过程中,会扫描inittab文件的内容,并执行它. 1.那么,我们可以通过直接修改initt ...

  8. 定时开机-开机自动运行程序-定时关机(windows 下)

    前言 电脑长时间未关机第二天来就会完全卡死. 将有规律.重复性动作自动化. 目录 一.设置定时开机 二.设置开机启动自定义应用 三.设置定时关机 一.设置定时开机 定时开机这个,可能需要看" ...

  9. /etc/rc.local 与 /etc/init.d Linux 开机自动运行程序

    linux有自己一套完整的启动体系,抓住了linux启动的脉络,linux的启动过程将不再神秘. 本文中假设inittab中设置的init tree为: /etc/rc.d/rc0.d /etc/rc ...

最新文章

  1. 想知道spring boot+cloud+docker的微服务体系架构如何使用吗?
  2. 励志前行,加速BCH创新落地
  3. websocket多客户端接收消息_WebSocket之消息接收发送
  4. lightoj1027_数学求期望
  5. 【离散数学笔记】计数原理:解决计数问题的基本方法
  6. vue 父组件调用子组件内置方法
  7. Python内置函数一览表
  8. 【Electron+Vue】【一】开发跨平台桌面应用了解+构建
  9. linux查看hostid,lmhostid获取hostid为空问题
  10. 打造智慧城市 构建新型城镇化
  11. 21 年年度最佳开源软件!
  12. 计算机访问网络延迟越低越好吗,网速和网络延迟(网络延迟取决于什么)
  13. SSIS Execute SQL Task assign output 的两种方法
  14. 登陆注册小Demo实现
  15. FT232H USB转串口,I2C,JTAG高速芯片
  16. Kaggle TMDB 票房预测挑战赛
  17. 【看表情包学Linux】环境安装 | 安装XShell | 基本的账号管理
  18. curl 增加header_Curl发送header头信息
  19. RTrPPG: An Ultra Light 3DCNN for Real-Time Remote Photoplethysmography
  20. ubuntu linux卸载软件命令,ubuntu安装和卸载软件命令

热门文章

  1. HBase问题诊断 – RegionServer宕机
  2. oppo--软件测试工程师岗位面试总结(二)
  3. 【Unity】关于 InputManager 以及改键功能的制作
  4. android xutils 注解,android Xutils dbutils 注解
  5. secure CRT上传下载文件
  6. 2020最新Java通用后台管理系统
  7. [机器学习入门笔记] 1. 周志华. 《机器学习》
  8. 计算机网络笔记(5) 传输层滑动窗口协议(GBN、SR)
  9. 简历自动化抓取,一键get百份求职简历
  10. 用液晶显示器和纯平显示器浏览Blog