Android6.0屏幕固定功能,如何开机只能运行当前app不能退出

需求:
接上回,还是那台小米平板4,终于拿到了root权限。并且实现了开机启动某app,现在的需求是:要求只能运行这个app,不能退出,不能回退到主屏幕,不能Home键,重启之后还是我的app,你不能退出,除非你输入万能密码。。。

背景:
然而之前用的是ScreenPin功能(也有翻译成报刊亭模式),这是Android自6.0开始系统内置的一个功能,主要用作商场演示等的场景,就是设定好之后,手机只能运行这个app(比如这个app是介绍手机的一个广告app,或者某工厂内的一个办公app,比如扫码,只能扫码用,别的干不了,因为你不能回到主屏幕,只能操作这一个)。这个系统内置功能长这个样子

可以看到有两个可操作项:“知道了”和”不用了“,那么这个时候如果点击”不用了“是不会激活ScreenPin的,跟操作普通app一样,想退出就退出,想结束任务就结束,没有任何限制。那么这一定不是我想要的。
PS. 如果进入了固定屏幕模式,除了重启手机之外另外一种方法是adb执行命令:
adb shell am force-stop xx.xx.xx 后面是你的包名。

步骤一  如果不想让用户看到上面的固定屏幕提示而直接固定了屏幕的话,你的应用必须要成为设备拥有者
来自StackoverFlow大神的解答:https://stackoverflow.com/questions/28437529/how-to-pin-an-app-without-a-dialog-android
这让我想起早年间用安卓机装某60安全卫士的时候提示绑定设备的场景,应该就是这里了。

那么问题来,如何将我的app注册为设备拥有者,直接搞之。

  1. AndroidManifest.xml注册一个继承自android.app.admin.DeviceAdminReceiver的receiver

    /rex/xml/device_admin内容:

    2. .DeviceAdminReceiver里毛都不用写

    3.ok代码部分到这里,然后adb shell进入到设备,切换su执行命令

    然而我却得到了这样的提示

    也是,都MIUI了,设备拥有者肯定不会空闲出来,但是打开设置却怎么也找不到绑定设备拥有者的地方,一定是雷总故意隐藏起来了。

    4.其他注册设备拥有者的方法,既然已经获取了root权限,那么系统目录简直我是畅行无阻,/data/system/device_owner.xml,创建这个文件,写入如下内容:

    然后reboot。挖槽还是不好死,而新建的device_owner.xml也不翼而飞,看来是遇到了鬼,于是便把目光投向了/system/app里的其他文件/夹,其中有一个叫XiaoMiFramework之类的名字,我居然删除了它,然后程序各种报错,然后reboot,然后再次执行

    居然出现了下面的提示:

后来的故事大家都知道了,白雪公主和七个小矮人从此过上了幸福快乐的生阿活。。。

参考链接:
1.How to pin an app without a dialog android
2.HOW TO TURN YOUR ANDROID APPLICATION INTO A KIOSK
3.Android Kiosk Mode Without Root
4.DeviceAdmin简单实践

#文章做折腾过程记录,不对任何变砖与异常负责

记录我是怎样把小米平板4(MIUI9.6)刷成开发板+获取root的

需求
实现一个app在小米平板4(MIUI9.6)上开机自动启动,如此而已。
然鹅,折腾的路确很长。

尝试一
作为一个半生熟的Android开发狗,那么开机启动一个app还不简单?我新建一个BootReceiver,我再申请权限android.permission.RECEIVE_BOOT_COMPLETED,我再声明Activity、Service、Intent什么的blablabla,整个流程做安卓开发的你一定不会不清楚,反正度娘是妥妥儿的告诉我。但是折腾完发现,无论如何就是不好死?开机app不启动,于是打开百度我会搜索这样的关键字“Android app 开机启动”,然后会找到这样的文章: https://blog.csdn.net/mmmccc000/article/details/52626075/ 其中你反复验证启动失败的原因:是不是Fast Boot模式?是不是权限添加的不对?是不是应用默认装到了sd卡里,我怎么样才能不装到sd卡而装到系统空间?各种各样的疑问,各种各样的尝试,但最后的结果就一个:还是不行。


尝试二
分割线分割前生,前生事此不再提,也就说使用开机广播那一套不知道是不行,还是还需要另外的协助?自省一下,前提条件是在小米平板4上装可以自动启动的app,那么小米平板4目前运行的是“MIUI9.6稳定版”,小米的系统肯定是深度定制版不知道有多深,但是小米可是有开发板的系统,是支持折腾的,那么问题来了,官网下载开发板地址是多少?此处内心独白:既然前面那套开机广播的脆脆弱弱(我自始至终都没有在模拟器上尝试,不知道为什么,可能是秀逗了),那么我可以不可以直接获取root权限,比如修改个init.d什么的直接就勾起我的Activity?脑回路有些大,但是没大胆就没大产不是。。。所以此处心里想的就是:开发板的系统自带肯定自带root权限,oh yes。。。
那刷小米的官方系统倒是很简单啊,直接设置里面手动选择安装包什么的就可以了,可是选来选取,刷来刷去我发现,账号依然不是root,adb连接到设备su依然不可用。

此处的插曲是,刷机之前需要解设备锁,也就是解锁BL(BootLoader),具体查看“更多设置” -> “开发者选项” -> “设备解锁状态“,如果因为下面这种情况卡住的话,告诉你只要在当前设备上换一个注册时间比较长,活跃度高的小米账号绑定设备,然后重新解锁就行。

请在此设备上登录该账号720小时后再尝试解锁该设备

 

迷茫时刻
可我真的记得有篇文章说的是小米开发板自带root,百度了N多文章,一天下来,脑子里什么都没有,全是这些内容,你只是个开发人员,你明白app生命周期,但系统原理你是无能为力的。要不淘宝上几十块刷一个吧,可是淘宝上问一下,有说能刷的,有说刷不了的。。。
屁不就刷个鸡?百度不行谷歌我还不行么。。。

尝试三 刷入TWRP
还是Google大法好,让我找到了这篇文章:《How to Install twrp Recovery Root XiaoMi Mi Pad 4》
文章清清爽爽,简单易懂,用到的几个文件清单如下,如果你不能下载的话,可以去这里:链接: https://pan.baidu.com/s/1NfYY2RRPmIwTILekDqv25w 提取码: zthz
1.TWRP 3.2 Xiaomi Mi Pad 4 对应Try.7z包里的recovery.img
2.SuperSu/Magisk
3.adb fast driver Try.7z包里没有这项,adb我觉得你自己能搞定
4.No-verity-opt-Entrypt
5.adb fastboot tools 参考3

参照着大神的文章,终于一步一步装上了TWRP,中间的过程如:

安装完成后手机是这样的,

 

然后adb shell进入设备,敲入su,发现$符号变成了#号才明白,root特么的成功了。

尝试四 怎么样把app安装到/system/app中
(以下操作在成功安装TWRP后进行)

既然机器已经root,那么我就可以乱来了是不是,我就可以直接
(以下操作在重启按住音量增大键+电源键进入TWRP后,选择Advanced->Terminal后进行,直接adb shell是没有vi等功能的)
1.vi init.d
2.GG 回车 a 回车 am start cc.lison.locked
3.Esc :wq
4.reboot
不好意思,轻度vim党,第二步的意思是翻到文件最后并加入am那句命令,然后保存重启,不好死,还是不好死,重启进入TWRP的Terminal发现刚才修改的init.d的内容没有了,改写的内容被覆盖掉了。。。怪不得一直提示我FileSystem read-only之类的,然后在TWRP中尝试文件管理器直接修改文件权限为755,还是不好死。。。又尝试了很多Magisk里的模块,不好死不好死。。。

尝试五
这一步尝试已经忘了搜索百度的什么关键字,总之是摸石头过河摸到了石头,详参这里:https://www.androidauthority.com/install-user-app-as-system-app-how-to-93522/
既然已经拿到了root权限,adb root + adb remount却不行,但是直接adb shell,然后切换su却可以(adb进入shell之后无法使用vi等工具),这是前提条件。于是又下载了一个ES 文件浏览器,安卓玩家对这个肯定不陌生,Magisk对其进行root授权(好像打开进入app就自动授权root权限),打开ES文件浏览器,把你要开机启动的app拷贝到/system/app目录,然后点击安装,世界就如此美好了。。。

PS。如果要删除安装在/system/app的app的话,只需要删除这个apk文件即可。

#文章做折腾过程记录,不对任何变砖与异常负责

记录一种科学上网的方法,查资料时可用Detour IOS配置实践


 

需求是能够科学上网。

原材料:
1.IOS手机
2.DetourAPP,APPStore下载地址
3.一堆的SSR/SS账号,不要问我这是什么,问百度。
https://www.ssrtool.com/tool/free_ssr,或者直接百度搜索:免费ss账号

Detour创建两种规则,一种国内直连(Direct),一种全局代理(使用SSR、SS账号)。

具体方法如下:

在 Detour 配置页面, 点击添加新代理,类型选择 Direct,标题随便写(写直连),保存。

在 Detour 配置页面, 点击添加新代理,类型选择 ShadowSocks,其他信息也依次填入并保存。

在 Detour 配置页面,点击添加新规则,类型选择 Country,国家代码写 CN,是否匹配选择是,标题写直连,代理选择刚刚新建的直连,保存。

在 Detour 配置页面,点击添加新规则,类型选择 All,代理选择你刚刚新建的 ShadowSocks代理,标题随便写全局。

(先建立的规则会先匹配,所以先创建直连规则)

 

添加代理按钮右侧有扫码按钮,部分网站分享的免费SS账号可直接扫码获取填充,比较方便。

證悟、佛心與凡夫心 讀記《西藏生死書》

我們雖然也想佛陀一般具有佛性,卻未認出來,因爲它被我們的凡夫心包得密不透風。試著觀想這裏有一隻花瓶,瓶内的空間與瓶外的空間一模一樣,卻被脆弱的瓶壁分隔。我們的佛心被包在凡夫心的瓶壁内。儅我們證悟時,就好像花瓶破成碎片,“裏面”的空間與“外面”的空間結合爲一。它們合而爲一。當下我們才發現,它們從未分離也并無二緻,他們是永遠相同的。

 


摘自《西藏生死书》

索甲仁波切
郑振煌 译

 

Windows平台64位ipfs分布式文件系统go语言版本下载包

由于你看我比较帅等比较奇怪的原因,ipfs.io官网打不开,所以路过的好心人就提供一下。

包内文件为Windows平台64位压缩文件版。下载完成之后cmd进入文件夹执行./install.sh即可安装。其他文档及说明请八仙过海,各显神通。

好东西不多说,直接下

链接: https://pan.baidu.com/s/1GBaccaPR5L-7ilPs5Zpmnw
提取码: gsv6

BootstrapValidator 页面验证多个form

只做记录,没什么技术含量。

每个页面多个form,没问题,form id不同,name不同,然后“标识”不同,所谓标识就是放一个<input type=”hidden” 指定比如name=”type” ,那么多个form在action到同一个method的时候,就使用type判断当前提交的是哪个form;那bootstrapValidator里绑定的内容如下:

第一行jQuery选择器匹配所有form并添加bootstrapValidator,然后post时使用this传递form data,其他的form处理都一样,就四酱。

openshift配置http跳转https并且www域名跳转不带www域名的apache rewrite规则

不说原因直接开,需求就是搞了个https免费证书,要求所有http请求都跳转到https,并且www域名跳转到不到www的域名,比如请求www.lison.cc跳转到https://lison.cc,而请求lison.cc跳转到https://lison.cc,全站https嘛。

1.首先设置DNS. 我用的cloudflare的CDN,DNS设置看起来是这样的:

cloudflare为lison.cc做的的DNS设置

2.设置openshift你的application的alias。
默认的有lisonliou-osrd.rhcloud.com,然后再添加lison.cc,www.lison.cc,这是域名绑定?不是很清楚,我就是卡在这里好几个钟头。。。

3.设置转发规则。
我用的apache服务器,所以只需要修改.htaccess文件,添加如下行:

 

第一个rewrite规则是将带www(或者其他,因为已经做了泛解析)的网址跳转到https://aixiadianying.com;

第二个rewrite是将http请求定向到https,实现全站https,就是这样。

最后为业余时间做的站露个脸:爱下电影网 – 一个可以下载电影的网站~ !

Happy Holiday~