为了解决项目中应用程序开机自启动问题,搭建了一个小demo,用于学习这个开机自启动的问题;

参考博客:

https://blog.csdn.net/qq_34897442/article/details/52263384

Caused by: java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.int的问题可以参考:https://blog.csdn.net/chengfu116/article/details/74636977

有大牛写了个AutoStart的库:https://github.com/csq20081052/AutoStarter


demo工程各部分代码如下:

AndroidMainfest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.ciky.bootstartup"><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><receiverandroid:name=".BootBroadcastReceiver"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED"/><category android:name="android.intent.category.DEFAULT"/></intent-filter></receiver></application></manifest>

新建一个广播接收器取名为BootBroadcastReceiver.java,其代码如下:

BootBroadcastReceiver.java

package com.ciky.bootstartup;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;public class BootBroadcastReceiver extends BroadcastReceiver {static final String ACTION="android.intent.action.BOOT_COMPLETED";@Overridepublic void onReceive(Context context, Intent intent) {// TODO: This method is called when the BroadcastReceiver is receiving// an Intent broadcast.if(intent.getAction().equals(ACTION)){Log.d("ciky","接收器接受到开启完成广播!"+intent.getAction());System.out.println("自启动程序即将执行!");Intent mainActivityIntent=new Intent(context,MainActivity.class);mainActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(mainActivityIntent);}}
}

MainActivity.java

package com.ciky.bootstartup;import android.support.v4.widget.TextViewCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView tv=new TextView(this);tv.setText("Hello,Main");setContentView(tv);}
}

会产生如下结果——

接收器接受到开启完成广播!android.intent.action.BOOT_COMPLETED

自启动程序即将执行!


如果想要让你的apk获取系统权限的话(参考:https://www.cnblogs.com/cyqx/p/5829650.html)我没有尝试过~~摘录过来的

第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:

1. 在应用程序的AndroidManifest.xml中的manifest节点中加入

android:sharedUserId="android.uid.system"这个属性。

2. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行

3. 使用mm命令来编译,生成的apk就有修改系统时间的权限了。

第二个办法麻烦点,不过不用开虚拟机跑到源码环境下用make来编译:

1. 同上,加入android:sharedUserId="android.uid.system"这个属性。

2. 使用eclipse编译出apk文件,但是这个apk文件是不能用的。

3. 用压缩软件打开apk文件,删掉META-INF目录下的CERT.SF和CERT.RSA两个文件。

4. 使用目标系统的platform密钥来重新给apk文件签名。这步比较麻烦,

首先找到密钥文件,在我的Android源码目录中的位置

是"build        argetproductsecurity",下面的platform.pk8和platform.x509.pem两个文件。

然后用Android提供的Signapk工具来签名,signapk的源代码是

在"build        oolssignapk"下,用法为"signapk platform.x509.pem platform.pk8 input.apk output.apk",

文件名最好使用绝对路径防止找不到,也可以修改源代码直接使用。

这样最后得到的apk和第一个方法是一样的。

最后解释一下原理,首先加入android:sharedUserId="android.uid.system"这个属性。

通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中。那么把程序的UID配成android.uid.system,也就是要让程序运行在系统进程中,这样就 有权限来修改系统时间了。

Android应用 开机自启动相关推荐

  1. Android APP开机自启动基本方法

    前言 应用自启动主要是通过接收系统广播BOOT_COMPLETED来实现的,在receiver中执行APP启动的方法. 实现 主要分为两个部分: AndroidManifest.xml配置,包括权限配 ...

  2. android 6.0关闭开机启动器,Android实现开机自启动及开机自启动失败原因

    1.开机自启动实现代码 BroadcastReceiver开机自启动实现,MainActivity.class为自启动显示的页面. public class BootBroadcastReceiver ...

  3. Android 实现开机自启动 Service

    首先做一个监听器: public class StartBroadcastReceiver extends BroadcastReceiver{ private static final String ...

  4. [Android]开机自启动脚本和selinux权限配置

    概述 在前段时间的工作中,需要开发一个开机自动启动的脚本,现把开发过程记录一下 主要框架 编写一个可以开机自动启动的脚本,方法就是通过rc文件,在boot_complete=1时,去启动这个服务,那么 ...

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

    2019独角兽企业重金招聘Python工程师标准>>> Android应用如何开机自启动.自启动失败原因 本文主要介绍Android应用如何开机自启动.自启动失败的原因.adb命令发 ...

  6. 用Xamarin 实现园友的 :Android浮动小球与开机自启动

    原文:用Xamarin 实现园友的 :Android浮动小球与开机自启动 前两天看园子里有筒子写了个 Android浮动小球与开机自启动  , 感觉这种被 360 玩烂的功能原来是如此的简单啊... ...

  7. android软件自动启动软件下载,Android编程实现应用程序开机自启动的方法

    本文实例讲述了Android编程实现应用程序开机自启动的方法.分享给大家供大家参考,具体如下: Android在开机时自动启动一个应用程序 在启动时自动启动一个应用程序: 1.AndroidManif ...

  8. Android 开机自启动

    首先实现开机自启动: 第一步创建一个广播接收者,如MyBootBroadcastReceiver.java View Codepackage com.example;import android.co ...

  9. android 6.0 开机自启管理,Android App 如何做到开机自启动

    Android 系统在完成启动后,会发射一个ACTION_BOOT_COMPLETED的广播,并且这个广播只有系统才能发送,来广播系统启动已完成,因此我们如果可以在APP内拦截这个广播的话,就可以让A ...

  10. Xamarin.Android 开机广播、开机自启动

    跟原生的做法一样. 1.继承BroadcastReceiver类,在OnReceive中做开机自启动(或者其他事情), namespace Test.Droid {public class BootR ...

最新文章

  1. 超级简单的jquery轮播图demo
  2. VC++ 隐藏控制台程序窗口
  3. git是航空母舰:ScrumBoard
  4. 十一、explain属性介绍
  5. the Open Source Community
  6. android ota更新app,企业 OTA 更新  |  Android 开源项目  |  Android Open Source Project
  7. python实现微信小程序的接口自动化_appium+python自动化56-微信小程序自动化(摩拜为例)...
  8. appSettings 配置mysql_app.config数据库配置字符串的三种取法
  9. Vivado工程路径太长导致不能生成bit文件
  10. vue 高德地图搜索功能_VUE中使用高德地图做轨迹添加功能,帮助轨迹展示
  11. 【转】doGet/doPost
  12. C++ 数组动态分配
  13. 商务与经济统计学 第五章案例题
  14. a标签实现下载文件功能
  15. Java工作流引擎:jBPM、Activiti以及SWF
  16. 单片机led灯闪烁实验总结_项目二 LED灯闪烁设计实现
  17. 数据压缩实验5-JEPG解码
  18. python相对路径找不到文件_Python里使用相对路径的坑
  19. 微信小程序 table表格 固定表头和首列 右侧表格可以左右滚动(多种表格演练)
  20. GitLab使用手册

热门文章

  1. html 广告加载页面,JS广告代码延迟加载或是最后加载加快页面载入
  2. ubuntu镜像安装教程
  3. 类似win7系统泡泡屏保
  4. linux系统github全局加速
  5. 玛雅日历和2012年12月,whats的新政
  6. PKU ACM 1008 玛雅历
  7. win7 windows update 无法更新错误代码80072EF
  8. Rant ?? 我爱每一片绿叶
  9. Category底层原理实现
  10. python安装库的命令-免费足球现场直播直播