这段时间在做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. import android.app.Activity;
  3. import android.os.Bundle;
  4. public class BootTestActivity extends Activity {
  5. /** Called when the activity is first created. */
  6. @Override
  7. public void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.main);
  10. }
  11. }

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

注意:必须在intent中添加Intent.FLAG_ACTIVITY_NEW_TASK标记。因为每个Activity必须建立在一个任务栈中,这个flag指定了Activity的启动模式,这个flag的意思就是在一个新的任务栈中启动。在Activity里面用startActivity这个方法去启动一个新的Activity的时候,Intent有默认的启动模式。而在Activity之外调用startActivity方法时候没有默认的启动模式。比如在service或者broadcastReceiver等,中都需要指定Activity一个启动模式。

  • import android.content.BroadcastReceiver;
  • import android.content.Context;
  • import android.content.Intent;
  • public class BootCompletedReceiver extends BroadcastReceiver {
  • @Override
  • public void onReceive(Context context, Intent intent) {
  • if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED))
  • {
  • Intent newIntent = new Intent(context, BootTestActivity.class);
  • newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  //注意,必须添加这个标记,否则启动会失败
  • context.startActivity(newIntent);
  • }
  • }
  • }

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

  1. <receiver android:name=".BootCompletedReceiver">
  2. <intent-filter>
  3. <action android:name="android.intent.action.BOOT_COMPLETED" />
  4. <category android:name="android.intent.category.HOME"/>
  5. </intent-filter>
  6. </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. <!-- permissions -->
  7. <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
  8. <application android:icon="@drawable/icon" android:label="@string/app_name">
  9. <!-- activities -->
  10. <activity android:name=".BootTestActivity" android:label="@string/app_name">
  11. <intent-filter>
  12. <action android:name="android.intent.action.MAIN" />
  13. <category android:name="android.intent.category.LAUNCHER" />
  14. </intent-filter>
  15. </activity>
  16. <!-- receivers -->
  17. <receiver android:name=".BootCompletedReceiver">
  18. <intent-filter>
  19. <action android:name="android.intent.action.BOOT_COMPLETED" />  、
  20. <category android:name="android.intent.category.HOME"/>
  21. </intent-filter>
  22. </receiver>
  23. </application>
  24. </manifest>
  25. 转载自:http://www.cnblogs.com/xiaochao1234/p/3622978.html

Android开机启动Activity或者Service方法(转载)的更多相关文章

  1. Android开机启动Activity或者Service方法

    本文出自 “Bill_Hoo专栏” 博客,请务必保留此出处http://billhoo.blog.51cto.com/2337751/761230 这段时间在做Android的基础开发,现在有一需求是 ...

  2. Android——开机启动功能(Service和BroadcastReceiver)

    BroadcastReceiver(广播接收器):发出广播让服务器去接收 BootReceiver.java package com.example.chenshuai.test321; import ...

  3. Android app启动activity并调用onCreate()方法时都默默地干了什么?

    Android app启动activity并调用onCreate() 方法时都默默地干了什么?   在AndroidManifest.xml文件中的<intent-filter>元素中有这 ...

  4. android开机启动流程说明

    android开机启动流程说明 第一步:启动linux 1.Bootloader 2.Kernel 第二步android系统启动:入口为init.rc(system\core\rootdir) 1./ ...

  5. Android开机启动程序

    android程序实现开机启动的原理,简单点说就是做一个广播接收器,接收到开机广播时就启动activity或service或执行其它操作.Android系统在启动的时候会发出一个开机广播,内容为ACT ...

  6. ANDROID 开机启动VNC SERVER

    ANDROID 开机启动VNC SERVER 背景信息: 最近在做一个项目,在项目需求中有这么一项“要把VNC SERVER 添加到android里并让其开机自启动”.其实做这个项目也挺缚手缚脚的,因 ...

  7. Ubuntu 16.04设置rc.local开机启动命令/脚本的方法

    Ubuntu 16.04设置rc.local开机启动命令/脚本的方法       Ubuntu 16.04设置rc.local开机启动命令/脚本的方法(通过update-rc.d管理Ubuntu开机启 ...

  8. android emulator启动的两种方法详解

    android emulator启动的两种方法详解    转https://blog.csdn.net/TTS_Kevin/article/details/7452237 对于android学习者,模 ...

  9. Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)

    转载于:http://blog.csdn.net/byxdaz/article/details/9708491 http://blog.csdn.net/q876266464/article/deta ...

随机推荐

  1. wpf ListBox 双击事件时在子项添加Style 确保选中

    <ListBox ItemTemplate="{StaticResource CardPictureTemplate}" VirtualizingPanel.CacheLen ...

  2. ECOS-Ecstore mongodb大数据 读写效率优化

    转自同功BBS 拆表存取kv <?php /* 经过拆变优化的ECStore mongodb 类 base/lib/kvstore/mongodb.php*/ class base_kvstor ...

  3. 关于oracle数据库(1)

    兼容性的设置 cmd.exe是微软Windows系统的命令行程序,类似于微软的DOS操作系统.cmd.exe是一个16/32位的命令行程序,运行在Windows NT/2000/XP/2003/Vis ...

  4. 分析函数 over用法 之row_number() runk_number

    分析函数用于计算基于组的某种聚合值,每个组返回多个行,而聚合函数每个组只返回一个行 表: create table TB_SCORE ( id NUMBER(10), class VARCHAR2(1 ...

  5. μCos-ii学习笔记2_任务管理

    二.任务管理 任务管理是ucos-ii操作系统的核心内容.这一章大致就以下流程来介绍和总结任务管理的相关知识. 要实现复杂任务管理,必然要定义众多数据来描述任务状态,为了精简,建立了许多不同的数据结构 ...

  6. JS获取网页中HTML元素的几种方法分析

    getElementById getElementsByName getElementsByTagName 大概介绍 getElementById ,getElementsByName ,getEle ...

  7. /etc/fstab 文件解释

    /etc/fstab 文件解释 文件fstab包含了你的电脑上的存储设备及其文件系统的信息.它是决定一个硬盘(分区)被怎样使用或者说整合到整个系统中的唯一文件. 这个文件的全路径是/etc/fstab ...

  8. windows7安装oracle 10g

    1.出现如下错误 解决办法: ①确保你有该文件夹的完全控制权.文件夹点右键->属性->安全->高级->所有者->改为自己->编辑自己的权限为完全控制. ②将setu ...

  9. mysql中出现没有权限访问或者查看全部数据库的问题

    在my.cnf中mysqld目录下的 socket=/var/lib/mysql/mysql.sock一行下面添加  skip_grant_tables---------------报错退出 serv ...

  10. table新增空白行到首行

    var str=""; str+="<tr bordercolor='#DEDEDE' bgcolor='#ffffff'>"; str+=&quo ...