android q启动前台服务,Android 启动前台服务,适配 vivo 与 OPPO 手机,第一期

news/2025/1/13 10:46:52/

Android 启动前台服务,华为、小米、三星、OPPO、VIVO的配合程度接 这是前文链接,我先甩在这里,上篇文章主要分析了几种品牌手机关于通知的配合程度,这篇文章先写第一期的解决方案,毕竟需求还是要跟版发布的~

因为测试的「华为 6.0」「华为 4.4.2」「小米6」「红米note 4X 6.0」「小米5.1.1」「三星手机 5.0.1」这几种机型可以正常开启前台服务,「vivo X9Plus 」「vivo X9 」「OPPO A59s」「OPPO R9s」不能开启前台服务,所以第一期先对 vivo 与 OPPO 做一个特殊的处理。

在 App 启动之后的适当时机,用下面这段代码

逻辑:判断是否是 vivo or OPPO 手机,如果是,再判断通知是否可用,如果不可用再弹出提示框引导用户进入设置界面。

if (Build.MANUFACTURER.equals("vivo") || Build.MANUFACTURER.equals("OPPO")){

if (!NotificationUtils.isNotificationEnabled(this)){

//未获得通知权限,此时把用户引向系统的设置界面,使用户手动打开通知权限

//代码不上了,总之在这里谈提示框让用户打开设置界面就好了~

}

}

检测通知是否可用的方法:

@SuppressLint("NewApi")

public static boolean isNotificationEnabled(Context context) {

AppOpsManager appOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);

ApplicationInfo applicationInfo = context.getApplicationInfo();

String pkg = context.getApplicationContext().getPackageName();

int uid = applicationInfo.uid;

Class appOpsClass;

try {

appOpsClass = Class.forName(AppOpsManager.class.getName());

Method checkOpNoThrowMethod = appOpsClass.getMethod("checkOpNoThrow", Integer.TYPE, Integer.TYPE, String.class);

Field opPostNotificationValue = appOpsClass.getDeclaredField("OP_POST_NOTIFICATION");

int value = (Integer) opPostNotificationValue.get(Integer.class);

return ((Integer) checkOpNoThrowMethod.invoke(appOpsManager, value, uid, pkg) == AppOpsManager.MODE_ALLOWED);

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (NoSuchMethodException e) {

e.printStackTrace();

} catch (NoSuchFieldException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

return false;

}

开启通知服务的代码:

/**

* 未发现不能执行「开启通知」操作的机型

* 能够进入「设置」页面的机型有:vivo X9 6.0系统 / vivo X9Plus 6.0系统 / OPPO R9s 6.0系统 / 华为ATH-TL00 6.0系统

*/

public static void toSettingPage(Context context){

Intent intent = new Intent();

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

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());

}

context.startActivity(intent);

}

第一期先这样处理,然后继续调研~


http://www.ppmy.cn/news/325501.html

相关文章

干掉360浏览器安全组件sesvc

这玩意会常驻后台&#xff0c;浏览器关了还会挂着。 这玩意表面上写着安全组件&#xff0c;其实就是一个广告后台&#xff0c;给浏览器插入广告的。 真正文件名叫&#xff1a;sesvc.exe 不能删除&#xff0c;删了还会下载回来的。 只能用管理员权限限制他启动&#xff0c; 方法…

VIVO推送接入 OPPO推送接入 客户端+服务端

老生常谈&#xff0c;推送接入已经不是什么难事&#xff0c;跟着文档走几小时就能搞定。不过我这里还是要记录一下&#xff0c;因为我在接入的时候还是有坑。希望这篇文章可以帮到你。 VVIO客户端 厂商推送&#xff0c;无非就是收到推送拉起通知。所以在最新版中&#xff0c;…

vivo 服务端监控体系建设实践

作者&#xff1a;vivo 互联网服务器团队- Chen Ningning 本文根据“2022 vivo开发者大会"现场演讲内容整理而成。 经过几年的平台建设&#xff0c;vivo监控平台产品矩阵日趋完善&#xff0c;在vivo终端庞大的用户群体下&#xff0c;承载业务运行的服务数量众多&#xff0c…

【营】在开局,提升【豹】发力 - vivo活动插件管理平台

一、背景 随着vivo悟空活动中台活动组件越来越多&#xff0c;活动中台开发的小伙伴们愈发的感知到我们缺少一个可以沉淀通用能力&#xff0c;提升代码复用性的组件库。在这个目标基础之上诞生了acitivity-components&#xff0c;但是随着组件的抽离增多&#xff0c;在和上下游…

无需ROOT卸载或禁用vivo / oppo手机的内置软件

需要注意的&#xff1a;卸载或禁用未知功能 App 可能会导致手机故障&#xff0c;在卸载或禁用 App 之前先备份手机内的重要数据。 本文使用的手机型号&#xff1a;vivo Z5 / oppo Reno Z 需要的软件&#xff1a; ADB下载地址&#xff1a;https://adbdownload.com/ ES文件浏…

怎样关闭vivo的HTML查看器,vivo安全模式在哪儿关闭?

01 vivo关闭安全模式&#xff0c;有两种方法&#xff0c;第一重启手机&#xff0c;长按手机的电源键&#xff0c;点击“重启”&#xff0c;重启之后&#xff0c;手机就会自动关闭安全模式了。第二恢复出厂设置&#xff0c;打开手机设置&#xff0c;点击更多设置&#xff0c;进入…

安全隐私之路没有尽头,vivo 坚守用户隐私安全底线

近日&#xff0c;国家网信办依据《个人信息保护法》《App 违法违规收集使用个人信息行为认定方法》等法律法规&#xff0c;集中查处了近 80 款“侵犯个人信息合法权益”的违法违规 App。这些 App 被查处的原因包括但不限于以下几点&#xff1a;“强制索要非必要权限”“无隐私政…

vivo手机mitmproxy安全证书安装

在使用手机进行App爬取时&#xff0c;要拦截https请求时&#xff0c;需要进行证书设置。 而mitmproxy在使用pip命令安装该模块后&#xff0c;会在你的用户目录下出现.mitmproxy目录&#xff0c;里面就包含了一套CA证书&#xff0c;如下&#xff1a;使用vivo手机安装证书时&…