应用保活
更新时间: 2024/11/18 11:08:13
融合呼叫技术的高接通方案提供接口开启前台服务提升进程优先级,配合开启系统权限能够有效提升应用处于后台或者锁屏状态时的响应成功率。
前提条件
- 已开通音视频通话 2.0 服务。
- 联系商务经理获取指定版本的 NERTC SDK,并已通过 NERTC SDK 实现音视频通话流程。
注意事项
- 设备限制:此功能仅适用于 Android 设备。
- 权限限制:
- 如果需要使用此功能,请在 Android Manifest 文件中增加相关的权限信息,详细说明请参考实现流程。
- 开启功能时,App 需要引导用户在设备上开启以下权限:
权限名称 | 权限说明 | 授权方式 |
---|---|---|
常驻通知 | 前台服务、消息推送时需要开启该权限,通常在应用的通知管理权限中设置。 | 引导用户在 App 中点击授权 |
显示悬浮框 | 可调用 SDK 中的接口设置显示悬浮窗。 | 引导用户在 App 中点击授权 |
后台弹出权限、锁屏显示 | 不同机型的此权限开启方式略有不同,App 需要引导用户在系统设置中找到此权限开关。 | 用户在系统设置中手动开启 |
后台运行 | 不同机型的此权限开启方式略有不同,App 需要引导用户在系统设置中找到此权限开关。 Android 6.0 以上系统在没有接通电源的情况下,会有电源保护机制,通常会默认禁止应用长期后台运行,如果应用切回后台之后,再次唤醒时可能需要重启。 | 用户在系统设置中手动开启 |
实现流程
API 时序
实现步骤
- 在 Android Manifest 文件添加以下权限和服务信息。
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> //显示悬浮框
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> //屏幕解锁,亮屏后应用解锁屏幕保护
<uses-permission android:name="android.permission.WAKE_LOCK" /> //电源锁,应用在熄屏的时候持有,可保持cpu继续运转
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> //前台服务
<service android:name="com.netease.lava.nertc.foreground.ForegroundService"
android:enabled="true"
android:exported="false"
/>
- 调用检查权限接口,查看权限是否已赋予应用。
//检查通知是否已打开
public boolean checkNotifySetting();
//检查悬浮框权限是否打开
public boolean checkFloatPermission();
- 调用
ForegroundKit.getInstance(context).init()
接口开启前台服务。
ForegroundKit instance = ForegroundKit.getInstance(context);
if(instance.checkNotifySetting()){
/**
* appKey,注册 NERtc 开发者appkey
* time 持有wakelock时间
*/
instance.init(appKey, time);
}
API 参考
接口 | 描述 |
---|---|
checkNotifySetting | 检查通知是否已打开。 |
checkFloatPermission | 检查悬浮框权限是否打开。 |
getInstance | 获取 ForegroundKit 实例。 |
setWindowFlags | 设置Activity窗口属性,保证锁屏能显示界面。 |
setConfig | 设置前台服务通知栏config参数,在 init(long)之前调用, |
init | 启动前台服务,需要用户开启通知。 |
release | 释放资源。 |
接口原型
checkNotifySetting
/**
* @note
* 通知是否被打开
*
* @return 用户是否打开通知
*/
public boolean checkNotifySetting();
checkFloatPermission
/**
* @note
* 检查悬浮窗开启权限
*
* @return 用户是否打开悬浮框权限
*/
public boolean checkFloatPermission();
getInstance
/**
* @note 初始化
* @param context android上下文对象
* @return foregroundKit 实例
*/
public static synchronized ForegroundKit getInstance(Context context);
setWindowFlags
/**
* @note
* 设置界面window属性,保证锁屏能显示界面
*
* @param activity
*/
public void setWindowFlags(@NonNull Activity activity);
setConfig
/**
* @Note
* 设置前台服务通知栏config参数,在 {@link #init(String, long)} 之前调用
* 必须要设置 icon,自定义布局才能生效
*
* @param config
*/
public int setConfig(@NonNull Config config);
init
/**
* @note
* 启动前台服务
*
* @param backgroundTime 当手机熄屏,处于后台的应用持有wakeup lock时长
* 此项设值 Android 6.0之后与权限是否允许后台活动有关
* 如果用户没有勾选,此项设置无效 @see {@link #requestBatteryOptimization()}
*
* @return @see{@link ErrorCode}
*/
public int init(String appKey, long backgroundTime);
release
/**
* @note
* 释放资源
*/
public void release();
此文档是否对你有帮助?