在安卓中,想要实现app开机自动启动,需要实现拦截广播android.permission.RECEIVE_BOOT_COMPLETED,并且需要使用静态注册广播的方法(即在AndroidManifest.xml文件中定义广播)

1、先在AndroidManifest.xml文件中定义广播和声明权限

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

<receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="1000">
                <action android:name="android.intent.action.BOOT_COMPLETED"></action>
            </intent-filter>
</receiver>

上面的MyReceiver是我自己写的类,继承了BroadcastReceiver的,代码如下:

public class MyReceiver extends BroadcastReceiver
{
    public MyReceiver()
    {
    }

@Override
    public void onReceive(Context context, Intent intent)
    {
        if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))
        {
            Intent i = new Intent(context, MainActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
        }
    }
}
上面的 i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 非常重要,如果缺少的话,程序将在启动时报错

2、以下是MainActivity类的代码

public class MainActivity extends ActionBarActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

Toast.makeText(this, "哈哈,我成功启动了!", Toast.LENGTH_LONG).show();
        Log.e("AutoRun","哈哈,我成功启动了!");
    }
}

3、安装app到手机上,然后启动一次程序(据说安卓4.0以后,必须先启动一次程序才能接收到开机完成的广播,目的是防止恶意程序)

4、重启手机,测试app有没有自动启动。如果有,那么恭喜你。如果没有,请往下看。

如果按照上面的全部步骤后操作后,重启没有自动启动程序,怎么办呢?是怎么回事呢?那么首先请检查一下你的手机是不是安装了360之类的安全软件,如果有,请在软件的自启动软件管理中将app设置为【允许】(我的手机没有安装这些软件,但是系统设置里面自带了自启动软件管理的功能 ,所以我在这里将我的app设置为【允许开机启动】),重启手机,测试是否成功。如果还是失败,那么请检查你的手机是不是设置了app安装首选位置是sd卡,据说安装到sd卡的话,因为手机启动成功后(发送了启动完成的广播后)才加载sd卡,所以app接收不到广播。如果是的话,把app安装到内部存储试试。如果不懂得设置的话,那么直接在AndroidManifest.xml文件中设置安装路径,android:installLocation="internalOnly"。比如:

<manifest
    package="cn.weixq.autorun"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:installLocation="internalOnly">

android实现程序开机自启动的更多相关文章

  1. android 程序开机自启动

    今天遇到程序开机自启动,然后查了一下,很简单,就记录一下. 开机自启动,一般我们是开启启动一个广播,然后在广播里启动Activity或者别的服务. 我们要做的很简单,就是在AndroidManifes ...

  2. Android应用如何开机自启动、自启动失败原因

    本文主要介绍Android应用如何开机自启动.自启动失败的原因.adb命令发送BOOT_COMPLETED.问题:应用程序是否可以在安装后自启动,没有ui的纯service应用如何启动?答案马上揭晓^ ...

  3. android中的开机自启动

    android中的开机自启动 android中的开机自启动可分为两步: 1.写一个BroadcastReceiver: public class BootReceiver extends Broadc ...

  4. Linux下的应用程序开机自启动

    Linux下的应用程序开机自启动,目前我知道的有2种: 1.将启动语句写到/etc/rc.local 2.在init.d放置启动脚本 第一种,很简单,直接写进去就行,比如说: /db/mongodb/ ...

  5. Linux设置程序开机自启动,系统命令chkconfig及linux /etc/rc.d/目录的详解

     整理了linux下程序开启几种方式,转载相关博客做统一记录 <linux程序设置开机自启动>转载自:https://www.cnblogs.com/flcz/p/7691532.html ...

  6. Linux设置程序开机自启动

    注意: 作者测试时,Linux版本为RedHat6,同时应用在CentOS6应该也可以(作者未实测,但有同事在CentOS6上使用可行),系统版本的不同,可能造成操作上的差异(CentOS7就与Cen ...

  7. Android应用程序开机开机启动

    有很过情况都需要Android程序开机自启,也就是在手机开机之后马上执行相应的Android程序. 实现的方法就是,在手机开机的时候接受相应的广播,在Android程序中接受相应的广播. 第1步:建立 ...

  8. CentOS 程序开机自启动方法总结

    1.把启动程序的命令添加到/etc/rc.d/rc.local文件中 CentOS系统下管理开机自启动的配置文件是/etc/rc.d/rc.local,所以只需编辑这个文件,在里面加入相应的启动命令即 ...

  9. win8程序开机自启动管理

    主要介绍利用系统自身的工具来管理开机自启动,而非第三方的工具,自己了解了,也写出来分享给大家@.·.@ 1.程序设置开机自启动 a. 打开计算机资源管理器-->进入"C:\Progra ...

随机推荐

  1. PHP 7 测试用例(转)

    性能改善:PHP 7高达两倍快的PHP 5.6 显著减少内存使用 抽象语法树 一致的64位支持 改进的异常层次结构 许多转化为异常致命错误 安全随机数发生器 删除旧的和不支持的SAPIs和扩展 空合并 ...

  2. java工程展示问题

    当java工程这样展示时,需要选择window---->Open Perspective----->java改变java工程的展示方式

  3. SpringMVC——接收请求参数和页面传参

    Spring接收请求参数: 1.使用HttpServletRequest获取 @RequestMapping("/login.do") public String login(Ht ...

  4. 人工智能 --test

    http://zhidao.baidu.com/link?url=9qp_SbSRfzMezkD25FZiWyNDsMxgcK6lecYYt0SW1ESsqkRaV5LYQ-0ysk3F2e35ajA ...

  5. 常用JQ特效代码

    /** * hhBase 平台js * User: huanhuan * QQ: 651471385 * Email: th.wanghuan@gmail.com * 微博: huanhuan的天使 ...

  6. 前端性能优化----yahoo前端性能团队总结的35条黄金定律

    转自 http://www.cnblogs.com/lei2007/archive/2013/08/16/3262897.html

  7. 状态压缩DP

    K - Necklace Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:327680KB     ...

  8. hdu N皇后问题

    此题是很基本的dfs的题目 ,但是要打表,否则会超时. 这题的思路就是从第一行一直放到第n行,因此行方面的判断就可以省略了.因此只要判断列方面和斜线方面是否满足条件,列方面用一个vis数组来记录是否已 ...

  9. 使用JDBC批量保存数据(JdbcDaoSupport,JdbcTemplete)

    最近做的一个项目中用到了Hibernate的,然后数据库批量插入数据的时候就使用到了hibernate的批处理,但是效率比较低,看网上说还有一些限制,要禁止二级缓存,还要多一个batch_size的配 ...

  10. Javascript的逻辑判断和循环的知识点

    //boolean Number //Number:0,1.2,0377八进制.0xff进制 Infinity无穷大(10/0),指数(科学计数法) //Infinity * 0==NaN //Inf ...