由于Linux的开源,市面上出现了很多定制的Android系统,这写系统有的将Android原生系统改的面目全非,很多方法不能同时在所有机型上适用,这是问题的一大难点。
项目中遇见了一个问题,我用JPush SDK推送消息,但是如果服务被关闭,将无法及时接收消息。这样也就没有起到应有的效果。所以我想让我的app接收系统广播,每次接收到Intent.ACTION_TIME_TICK这个广播我就去检查服务是否被关闭。可是这样就要面对另外一个问题:当用户使用第三方清理软件清理系统后,我的app就被标记为了stopped状态,无法再接收到系统广播,解决方法我倒是有一个,那就是让用户把我的app添加进自启动白名单里面,这样手机就能够接收系统广播了。当然你也可以把app安装进系统目录,这样就能像系统app一样接收系统广播了,但是我们不是流氓软件,所以我们没打算这样做。
这就需要我们拉起系统自启动设置页面,下面给出代码:
public class OpenAutoStartUtil { /** * Get Mobile Type * * @return */ private static String getMobileType() { return Build.MANUFACTURER; } /** * GoTo Open Self Setting Layout * Compatible Mainstream Models 兼容市面主流机型 * * @param context */ public static void jumpStartInterface(Context context) { Intent intent = new Intent(); try { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Log.e("HLQ_Struggle", "******************当前手机型号为:" + getMobileType()); ComponentName componentName = null; if (getMobileType().equals("Xiaomi")) { // 红米Note4测试通过 componentName = new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"); } else if (getMobileType().equals("Letv")) { // 乐视2测试通过 intent.setAction("com.letv.android.permissionautoboot"); } else if (getMobileType().equals("samsung")) { // 三星Note5测试通过 componentName = new ComponentName("com.samsung.android.sm_cn", "com.samsung.android.sm.ui.ram.AutoRunActivity"); } else if (getMobileType().equals("HUAWEI")) { // 华为测试通过 componentName = new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity"); } else if (getMobileType().equals("vivo")) { // VIVO测试通过 componentName = ComponentName.unflattenFromString("com.iqoo.secure" + "/.safeguard.PurviewTabActivity"); } else if (getMobileType().equals("Meizu")) { //万恶的魅族 // 通过测试,发现魅族是真恶心,也是够了,之前版本还能查看到关于设置自启动这一界面, // 系统更新之后,完全找不到了,心里默默Fuck! // 针对魅族,我们只能通过魅族内置手机管家去设置自启动, // 所以我在这里直接跳转到魅族内置手机管家界面,具体结果请看图 componentName = ComponentName.unflattenFromString("com.meizu.safe" + "/.permission.PermissionMainActivity"); } else if (getMobileType().equals("OPPO")) { // OPPO R8205测试通过 componentName = ComponentName.unflattenFromString("com.oppo.safe" + "/.permission.startup.StartupAppListActivity"); Intent intentOppo = new Intent(); intentOppo.setClassName("com.oppo.safe/.permission.startup", "StartupAppListActivity"); if (context.getPackageManager().resolveActivity(intentOppo, 0) == null) { componentName = ComponentName.unflattenFromString("com.coloros.safecenter" + "/.startupapp.StartupAppListActivity"); } } else if (getMobileType().equals("ulong")) { // 360手机 未测试 componentName = new ComponentName("com.yulong.android.coolsafe", ".ui.activity.autorun.AutoRunListActivity"); } else { // 以上只是市面上主流机型,由于公司你懂的,所以很不容易才凑齐以上设备 // 针对于其他设备,我们只能调整当前系统app查看详情界面 // 在此根据用户手机当前版本跳转系统设置界面 if (Build.VERSION.SDK_INT >= 9) { intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS"); intent.setData(Uri.fromParts("package", context.getPackageName(), null)); } else if (Build.VERSION.SDK_INT <= 8) { intent.setAction(Intent.ACTION_VIEW); intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails"); intent.putExtra("com.android.settings.ApplicationPkgName", context.getPackageName()); } } intent.setComponent(componentName); context.startActivity(intent); } catch (Exception e) { //抛出异常就直接打开设置页面 intent = new Intent(Settings.ACTION_SETTINGS); context.startActivity(intent); } } }
这样的方法我们可以适配市面上大部分手机了。
本来我是想过用代码将自己的app设置为开机自启动,但是从网络上找了很多方法,最后还是没有成功,希望有这方面经验的大神不吝赐教,拜谢!
想到我们打开软件的时候就应该判断我们的app是否已经被允许自启动了,我又遇见了一个难题,至今未能解决。怎么样才能像手机安全卫士一样获取到有哪些应用被允许自启动了呢?网上有人说看是否有开机启动权限,不可行,因为有权限也不能保证开机启动,因为用户如果禁止了,你的权限就不起作用了。还有看到一个大神的方法,记得好像是获取自启动的状态,但是不管用户允许了自启动还是禁止了,其状态都是0(默认),这方法也不可行。有哪位大神知道的话,还请告知,拜谢!
文章浏览阅读1.7k次。1、缺失值的表现形式:不区分大小写 NAN nan NaN 都是空值2、怎么创建缺失值:None 或者np.nan3、pandas处理缺失值判断isnull()检测整张表中的缺失值的数据df.isnull().any(axis=1)判断哪行中有空值 因为是按列的数据统计的 所以axis=1df.isnull().any(axis=0)判断哪列中有空值。。df.notnull().all(axis=1)判断哪些行中有非空值。。df.notnull().all(axis=0)判断哪些列中有非空值_pandas 根据日期回补数据
文章浏览阅读2.8w次,点赞12次,收藏34次。测试C语言部分代码_c语言白盒测试方法
文章浏览阅读8.1k次。一、问题pycharm 的tools下没有deployment选项,无法进行远程执行。二、前言使用的pycharm版本PyCharm 2019.3.2 (Community Edition)Build #PC-193.6015.41, built on January 21, 2020Runtime version: 11.0.5+10-b520.30 amd64VM: Op..._pycharm没有deployment
文章浏览阅读2.3k次,点赞2次,收藏3次。例子:看上面这个例子,我们的需求是:点击备注表格时,该表格变为可编辑状态的输入框,会出现输入框、两个按钮。点击对勾时,会修改备注发送给后端修改请求,修改备注,变为不编辑状态,输入框、按钮消失。失去焦点时,输入框同样变为不可编辑状态,输入框、按钮消失。问题的关键在于,input失焦事件总是先于对勾按钮的点击事件发生的。即当我们点击按钮对勾时,已经先失去了焦点,将按钮隐藏了。因此根本不可能..._失去焦点优先于点击事件
文章浏览阅读5.6k次。使用wangeditor 富文本编辑器的时候 在打开的页面的时候 总会自动定位到此处 有时候富文本 在底部时 也会定位到那 很不方便在node_module 中 找到wangeditor/release/wangeditor.js 将this.selection.createRangeByElem($last, false, true);this.selection.restoreSelec..._wangeditor默认不获得的焦点
文章浏览阅读3.6k次。import torchvision.models as models1.调整最后一层输出维度model = models.ResNet(pretrained=True)fc_features = model.fc.in_features# 获取全连接层输入维度model.fc = torch.nn.Linear(fc_features, num_class)2.调整某一层参数impo..._获取线性全连接层的输入维度
文章浏览阅读131次。原文地址:http://blogs.msdn.com/b/tess/archive/2008/02/15/net-debugging-demos-lab-3-memory.aspx操作步骤:1、产生压力:tinyget -srv:localhost -uri:/BuggyBits/Links.aspx -loop:40002、观察taskmgr的输出,w3wp的内存每秒钟大概...
文章浏览阅读1.1k次。@在 centos7 下安装 oracle 12c文章目录@在 centos7 下安装 oracle 12c环境安装必须的软件包前期准备修改 hostname配置 SSH 和 X11 转发安装 Oracle 12c创建目录和部署安装文件创建安装用目录(按照OFA标准)修改 ulimit 值:最大文件描述符数为4096修改 ulimit 值:最大用户进程数为16384增大 tmpfs 到4GB若 ..._在设置specify recovery options 时报磁盘空间不足
文章浏览阅读2.2k次,点赞4次,收藏7次。有鸡汤就有反鸡汤,有模式就有反模式。今天,我们来谈一谈程序员的行为中的那些反模式,涉及程序员的日常工作和学习的各个方面。这些反行为模式,并不针对某些特定的个人。如果你不幸中招,千万不要懊恼,因为这实在太正常不过了,很多反模式的坑我也是亲身踩过的^-^稍微修改几行代码就调试对所有程序员来说,这个行为有一点心理上的原因:工程师都喜欢在做完一点修改之后,立即看到它的效..._反模式开发
文章浏览阅读2.8k次。梯度下降的定义梯度下降问题就是沿着导数下降的地方移动,直到某点梯度最小,这个时候就达到了最优解多变量的梯度下降问题神经网络中遇到的问题是多变量的最优解,即多变量的梯度为零的解局部最优和全局最优问题通常,我们求得的最优解不一定是全局最优解,其可能只是局部最优解。..._智能控制,智能检测,模式识别,神经网络,模糊逻辑,机器学习,人工智能,深度学习,优化
文章浏览阅读2.4k次。每个人在职场上都不是一帆风顺的,总是会在工作中遇到各种各样的困难,这时候有些职场人就会坚持不住,产生消极的情绪,这对我们在职场上的发展是很不利的。为了我们能在职场上更好的发展,一定要学会控制好自己的情绪,要有一定的心理承受能力。有一些人,因为自身性格的原因,喜欢比较与别人在习惯或者生活中的不同,通常会表现出一种自卑的心理。那你一定不要有这样的想法,每个人从小的生活经历不同,做事习惯肯定也不相同,因此我们要在职场上中养成这四个好习惯,让我们在职场上更加自信。要勇于认识自己的缺点在工作中,我们通常会对自己_工作没有一帆风顺总有坎坷不平
文章浏览阅读193次。Eigen::Affine3与Eigen::Matrix4的转换// Matrix4f to Affine3fEigen::Matrix4f matrixTrans;Eigen::Transform<float, 3, Eigen::Affine> affineTrans (matrixTrans);// Affine3f to Matrix4fEigen::Transf..._eigen::matrix4f转eigen::affine3f