android的APP开机自启动

android的APP开机自启动


应用范围

-一般不推荐使用开机自启动,但有时候终端会有这个要求,特别是嵌入式的安卓终端,我目前知道的有两种方法:

  1. 接受android系统的开机广播内容为ACTION_BOOT_COMPLETED;
  2. 从系统源码修改,直接改动launcher,再重新编译


-第二种我还在学习,学好了再来填坑,这个底层的参考资料太少了,大家知道了麻烦指导一下我,这篇主要讲第一种方法。

第一种方法虽然比较容易实现,但其实效果不怎么理想,大概会有3-5S的延迟才会从主界面进入目标程序。而且android5.0之后对系统的安全提高了,很多时候不能自启动,这个后面再说。

具体实现 ##`

  1. 注册一个广播
    这里主要继承了BroadcastReceiver类
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

/**
 * Created with IntelliJ IDEA.
 * User: qyg
 * Date: 17-12-25
 * Time: am 10.29
 */
public class Autostart 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 mainActivityIntent = new Intent(context, MainActivity.class);  // 要启动的Activity
            mainActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(mainActivityIntent);
        }
    }
}

这里就注意两点:一是intent.getAction().equals(ACTION),是否接收到广播,二是addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
2. 写跳转的主程序
这个就是开机要进入的程序,这里写简单一点


import android.app.Activity;
import android.content.IntentFilter;
import android.os.Bundle;
public class MainActivity extends Activity {   // 收到消息启动此Activity
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
        TextView tv = new TextView(this);
        tv.setText("Helloworld");
        setContentView(tv);
    }
  1. 写配置文件manifest.xml
 <receiver android:name=".Autostart">
  <intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED" />
   </intent-filter>
  </receiver>

注意要加上权限

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

到这里基本可以实现程序开机自启动了。

自启动失败原因

  1. 没有接收到广播,忘记加权限
  2. 应用安装到了SD卡,系统是先发广播再检测SD卡,所以安装在SD卡内,肯定接收不到广播信息i;
  3. android5.0之后,加强了系统的安全性,应用程序安装后或是(设置)应用管理中被强制关闭后处于stopped状态,在这种状态下接收不到任何广播,除非广播带有FLAG_INCLUDE_STOPPED_PACKAGES标志,而默认所有系统广播都是FLAG_EXCLUDE_STOPPED_PACKAGES的,所以就没法通过系统广播自启动了。不过我们可以用adb实现,adb push you.apkname /system/app/下是会自动启动的。

本文测试代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值