Android应用 开机自启动
为了解决项目中应用程序开机自启动问题,搭建了一个小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应用 开机自启动相关推荐
- Android APP开机自启动基本方法
前言 应用自启动主要是通过接收系统广播BOOT_COMPLETED来实现的,在receiver中执行APP启动的方法. 实现 主要分为两个部分: AndroidManifest.xml配置,包括权限配 ...
- android 6.0关闭开机启动器,Android实现开机自启动及开机自启动失败原因
1.开机自启动实现代码 BroadcastReceiver开机自启动实现,MainActivity.class为自启动显示的页面. public class BootBroadcastReceiver ...
- Android 实现开机自启动 Service
首先做一个监听器: public class StartBroadcastReceiver extends BroadcastReceiver{ private static final String ...
- [Android]开机自启动脚本和selinux权限配置
概述 在前段时间的工作中,需要开发一个开机自动启动的脚本,现把开发过程记录一下 主要框架 编写一个可以开机自动启动的脚本,方法就是通过rc文件,在boot_complete=1时,去启动这个服务,那么 ...
- Android应用如何开机自启动、自启动失败原因
2019独角兽企业重金招聘Python工程师标准>>> Android应用如何开机自启动.自启动失败原因 本文主要介绍Android应用如何开机自启动.自启动失败的原因.adb命令发 ...
- 用Xamarin 实现园友的 :Android浮动小球与开机自启动
原文:用Xamarin 实现园友的 :Android浮动小球与开机自启动 前两天看园子里有筒子写了个 Android浮动小球与开机自启动 , 感觉这种被 360 玩烂的功能原来是如此的简单啊... ...
- android软件自动启动软件下载,Android编程实现应用程序开机自启动的方法
本文实例讲述了Android编程实现应用程序开机自启动的方法.分享给大家供大家参考,具体如下: Android在开机时自动启动一个应用程序 在启动时自动启动一个应用程序: 1.AndroidManif ...
- Android 开机自启动
首先实现开机自启动: 第一步创建一个广播接收者,如MyBootBroadcastReceiver.java View Codepackage com.example;import android.co ...
- android 6.0 开机自启管理,Android App 如何做到开机自启动
Android 系统在完成启动后,会发射一个ACTION_BOOT_COMPLETED的广播,并且这个广播只有系统才能发送,来广播系统启动已完成,因此我们如果可以在APP内拦截这个广播的话,就可以让A ...
- Xamarin.Android 开机广播、开机自启动
跟原生的做法一样. 1.继承BroadcastReceiver类,在OnReceive中做开机自启动(或者其他事情), namespace Test.Droid {public class BootR ...
最新文章
- 超级简单的jquery轮播图demo
- VC++ 隐藏控制台程序窗口
- git是航空母舰:ScrumBoard
- 十一、explain属性介绍
- the Open Source Community
- android ota更新app,企业 OTA 更新 | Android 开源项目 | Android Open Source Project
- python实现微信小程序的接口自动化_appium+python自动化56-微信小程序自动化(摩拜为例)...
- appSettings 配置mysql_app.config数据库配置字符串的三种取法
- Vivado工程路径太长导致不能生成bit文件
- vue 高德地图搜索功能_VUE中使用高德地图做轨迹添加功能,帮助轨迹展示
- 【转】doGet/doPost
- C++ 数组动态分配
- 商务与经济统计学 第五章案例题
- a标签实现下载文件功能
- Java工作流引擎:jBPM、Activiti以及SWF
- 单片机led灯闪烁实验总结_项目二 LED灯闪烁设计实现
- 数据压缩实验5-JEPG解码
- python相对路径找不到文件_Python里使用相对路径的坑
- 微信小程序 table表格 固定表头和首列 右侧表格可以左右滚动(多种表格演练)
- GitLab使用手册