在使用智能手机的时候,有些程序是一直伴随这我们的,或者说是需要实时反馈和交互的,例如我们手机的主题界面,闹钟程序等等。对于这些程序,我们自然而然的会希望他们能够开机自启动,因为这样子可以避免忘记手动开启某些程序,例如日常闹钟等等,并且省了很多繁琐的事情。

正如高焕堂先生总结Android框架时所说的“Don'tcall me, I'll call you back!”,在Android中,不同组件之间的调用往往是基于消息触发,而不是简单的事件调用。在Android中,广播机制也很好的贯彻了这个思想。下面这个程序,将会演示如何利用BroadcastReceiver来实现Activity和Service的开机自启动。

实现原理:当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为android.intent.action.BOOT_COMPLETED。所以,只要在BroadcastReceiver接收到该消息时,创建并启动相应的Activity和Service即可实现。

在该程序中,将创建一个BroadcastReceiver类BootBroadcastReceiver、一个Activity类StartOnBootActivity、一个Service类StartOnBootService。程序的示例程序的代码如下,重点代码的注解见代码中注释部分:

(1)配置文件“AndroidManifest.xml”

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.chem99.ui"
    android:versionCode="1"
    android:versionName="1.0.0" 
    android:installLocation="auto"
    >

<application>
<activity
            android:name=".StartOnBootActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

<service android:name="com.chem99.service.StartOnBootService" >
        </service>

<receiver android:name="com.chem99.service.BootBroadcastReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
</application>

在该配置文件中,配置了各个组件的基本参数,在使用权限中需要加入“<uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED" >”权限,另外还有一点比较重要的就是在BootBroadcastReceiver中添加intent-filter,如此一来BootBroadcastReceiver的onReceiver方法才能被触发。

(2)广播监听类“BootBroadcastReceiver”

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) {
        
         // 当收听到的事件是“BOOT_COMPLETED”时,就创建并启动相应的Activity和Service     
        if (intent.getAction().equals(ACTION)) {    
            // 开机启动的Activity
            Intent activityIntent = new Intent(context,StartOnBootActivity.class);
            activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);    
            // 启动Activity     
            context.startActivity(activityIntent);    
            // 开机启动的Service     
            Intent serviceIntent = new Intent(context, StartOnBootService.class);    
            // 启动Service     
            context.startService(serviceIntent);  
            
        }    
    }

}

(3)“StartOnBootActivity”

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class StartOnBootActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
         // 设置Activity的显示内容为一个文本域     
        TextView aTextView = new TextView(this);    
        aTextView.setText("Wow!I started after cellphone boot.");    
        setContentView(aTextView);    
    }

}

(4)“StartOnBootService”

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;

public class StartOnBootService extends Service {

@Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }
    
    @Override
    public void onStart(Intent intent, int startId) {
        // TODO Auto-generated method stub
        super.onStart(intent, startId);
         // Service被启动时,将会有弹出消息提示[MyService onStart]     
        Toast.makeText(this, "[MyService onStart]", Toast.LENGTH_LONG).show();    
    }

}

(5)BootBroadcastReceiver

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) {
        
         // 当收听到的事件是“BOOT_COMPLETED”时,就创建并启动相应的Activity和Service     
        if (intent.getAction().equals(ACTION)) {    
            // 开机启动的Activity
            Intent activityIntent = new Intent(context,StartOnBootActivity.class);
            activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);    
            // 启动Activity     
            context.startActivity(activityIntent);    
            // 开机启动的Service     
            Intent serviceIntent = new Intent(context, StartOnBootService.class);    
            // 启动Service     
            context.startService(serviceIntent);  
            
        }    
    }

}

程序实现后,在手机或者模拟器上面安装,然后重启机器,就能在开机进入系统之后看到该Activity界面以及Service的弹出消息。程序的运行截屏如下图:

转载:http://bk-lin.iteye.com/blog/1487182

转载于:https://www.cnblogs.com/yourancao520/archive/2012/06/21/2557297.html

巧用BroadcastReceiver实现开机“自”启动相关推荐

  1. 在 win10 环境下,设置自己写的 程序 开机自动 启动的方法

    原文:https://jingyan.baidu.com/article/c33e3f48d1360fea15cbb5c9.html win10组策略中设置在开关机时运行的脚本 分步阅读 win10组 ...

  2. 配置系统在开机时启动虚拟机

    2.2  配置系统在开机时启动虚拟机 可以通过两种方式配置系统在开机时自动启动虚拟机.从命令行可以自动启动系统.以下命令只需要一步即可设置,即添加一个到/etc/libvirt/qemu/autost ...

  3. 启明云端分享| sigmstar SSD201/SSD202D/SSD210/SSD212开机动画启动到底能做到多少

    提示:作为Espressif(乐鑫科技)大中华区合作伙伴及sigmastar(厦门星宸)VAD合作伙伴,我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考.同时也用 ...

  4. linux笔记之 开机服务启动的控制,系统日志的查看,防火墙的关闭

    /etc/inittab 配置默认运行级别 /etc/sysconfig/init 控制tty终端开启数量 终端颜色方案 /etc/init/rcS.conf 加载rc.sysinit脚本,完成初始化 ...

  5. 计算机服务管理器延迟启动项,开机延时启动程序

    此软件在网吧应该中属于实用工具!此外服务器上也有少数人需要,将这个开机延时启动程序发出来给大家用吧!延时启动无非是设置启动时间,让某几个程序在某个时间1个1个的启动!根据顺序! 例如设置进入系统桌面后 ...

  6. 【转】ubuntu 开机sudo启动应用程序

    转自:ubuntu 开机sudo启动应用程序_Honhy的博客-CSDN博客_sudo 启动应用 第一步:创建一个脚本(run.sh),我是放在桌面,脚本内容为: echo "hon123& ...

  7. 关于自定义脚本rc.local里开机不启动的问题--以tomcat和perl相关的脚本为例

    本文将自己遇到的一些自定义脚本加入开机启动项却不成功的问题加以说明,花费了我很长时间才得以解决,当然也多谢了自己朋友的帮忙,正是因为他们的提醒,最后才找到了解决的办法,谢谢他们!!!! 系统是cent ...

  8. 怎么设置计算机开机顺序,教你设置电脑开机程序启动顺序的详细教程

    设置电脑开机程序启动顺序 大家对于U盘重装系统已经并不陌生,而其中最重要的一个步骤,就是在bios里面设置开机启动项.而今天小编要给大家介绍到的就是关于电脑开机时,系统内软件的启动顺序设置,想必还有不 ...

  9. WPF 开机一键启动程序V1.0【原创】

    每天上班第一件事就是开电脑,然后开一堆软件... QQ..Opear..VS..虚拟机..RTX..等等..很费时间.有了这个软件就可以在开始的时候点击一键启动,之后你可以去泡杯茶了. 最近也正在回顾 ...

  10. 如何添加/去掉开机的启动项

    1.开始/所有程序/启动,将想加入开机启动的程序软件的图标的快捷方式放进去即可. 2.另一个办法,开始/运行输入regedit回车打开注册表编辑器,依次展开 [HKEY_LOCAL_MACHINE/S ...

最新文章

  1. Maven项目下HttpServletRequest 或 HttpServletResponse需引用的依赖包
  2. Http协议处理器——Http11Processor
  3. 如何给Typora安装主题
  4. svgsprite的svg-sprite-loader在vue中的使用及vue-cli如何配置
  5. 疫情期间,在家使用java的SSH框架实现一个简单的任务调度系统
  6. ntrip获取源列表_Ntrip协议简介(转)
  7. 取磁碟名稱 c++_安徽CDCSCONT PLUS/R/C/E生产厂家,联锁板生产厂家
  8. java给界面添加滚动条_Java Swing学习笔记:要求会默写或熟练的,GUI,控件,设置列或行,加滚动条,新界面...
  9. 1.4.1bat脚本命令COPY 拷贝 复制到
  10. Scheme调试手册(四)
  11. 听一下牛人是怎样自学MIT计算机系全部课程的[转]
  12. python实现单纯形法(大M法)
  13. 库缓存(Library Cache)内存结构
  14. ProcessOn 在线作图,真香指南
  15. TortoiseSVN 无论什么操作,都报同一个错误:请求的操作需要提升
  16. 推荐几款电脑测试软件
  17. ale_python_interface安装操作
  18. kmz转换为dwg_NX UG软件:带颜色的机器人工作站二维布局图JT格式文件转换方法...
  19. win7 下anaconda 安装及安装包
  20. 2017年7月历史文章汇总

热门文章

  1. 解决VB6.0中不能加载MSCOMCTL.OCX的错误提示
  2. 51Nod-1640-天气晴朗的魔法(最小生成树)
  3. rel=nofollow属性--seo
  4. 天气暖和了,我却感冒了
  5. jquery 1~6
  6. 关于nginx性能优化CPU参数worker_cpu_affinity使用说明
  7. 硬盘:协议-总线-接口
  8. HDU 6162 树链剖分
  9. ceph:如何处理rados --striper上传失败的对象
  10. 三、如何设置npm镜像