Android 程序后台运行和锁屏运行

您所在的位置:网站首页 安卓锁屏关闭应用程序设置 Android 程序后台运行和锁屏运行

Android 程序后台运行和锁屏运行

2024-07-10 08:08| 来源: 网络整理| 查看: 265

Android 后台服务保活 需求方案 推广一下我的个人博客小站: Z同学 期待大家的围观

需求

1.在华为手机中应用切换到后台后,打开其他app。需要我的应用后台仍然能够访问http,传输数据。

2.息屏后服务没有退出的话,需要继续后台运行,并进行网络数据的传输和请求

方案

1.添加应用到白名单中。代码如下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { try { String pn= getPackageName(); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); if (!pm.isIgnoringBatteryOptimizations(pn)) { Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); intent.setData(Uri.parse("package:" + pn)); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_CODE); } } } catch (Exception e) { e.printStackTrace(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE) { if (resultCode == RESULT_CANCELED) { Toast.makeText(this, "用户不允许程序后台运行~", Toast.LENGTH_LONG).show(); } } }

这个方案是将项目添加到系统白名单中,实现不进行电池优化,解决后台运行的问题。

结果:失败,在vivo手机低版本中能够通过,但是华为就不行了

2.创建前台服务,startForegroundService()来允许服务后台一直运行。

结果:失败,服务是存活了,切换到后台后,也不会被清理,通过状态栏上可以看到Notification的存活。

但是线程被停止了,网络请求被关闭了。整个Service被系统执行了暂停。

解决方案:

参考了音乐播放器,实现了长时间常驻和回收问题。

1.创建startForegroundService()服务,启动一个前台服务,这个只是告诉你启动服务,而不代表你的服务一直是前台服务。

2.在service中创建线程,循环执行notification的刷新。你可以不改变notification的信息,执行statForeground()方法。不断的刷新

系统会将你的应用判断为正在与桌面activity进行交互的进程。从而保证你的service的存活,你的所有网络请求和后台操作都会存活。(实测有效)

3.如果不喜欢notification 可以尝试浮动框。也是在service中调用线程循环刷新浮动框(未实测,但预估有效)

上面的方法能够实现应用被切换到后台后,也一直在运行。

最后一步,

创建一个普通的Service,在你的应用启动的时候创建它,应用退出的时候销毁它。

在service中监听亮屏和息屏操作

IntentFilter screenStatusIF = new IntentFilter(); screenStatusIF.addAction(Intent.ACTION_SCREEN_ON); screenStatusIF.addAction(Intent.ACTION_SCREEN_OFF); // 注册 registerReceiver(receiver, screenStatusIF);

然后在监听亮屏和息屏的时候 直接进行音视频的播放。 播放无声音音频文档。进行循环不断的播放。 自测可以和网易云音乐同样处于后台播放模式,服务都能一直稳定并进行发送网络。

由于项目原因就不提供代码了。代码比较简单 ,主要是想法和思路。

上面的方案执行后自测华为荣耀v10锁屏后运行30分钟,没有问题。 不用客户主动在电池权限中开启后台运行。就能保证服务稳定。

注意:如果非得追求客户无感的模式下,进行后台服务常驻,那应该算是非常流氓的行为了。或者你的app有微信的那么大的脸,让厂家将你的app添加到厂商版后台运行白名单。

否则给客户一个任务栏又有何妨。百度,网易云音乐等应用都是通过类似方式来实现后台运行。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3