前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >andriod使用超级播放器悬浮窗播不能正常使用

andriod使用超级播放器悬浮窗播不能正常使用

原创
作者头像
腾讯云-qichengdeng
修改2019-10-08 14:46:27
2.2K0
修改2019-10-08 14:46:27
举报
文章被收录于专栏:总结手写习惯

我使用播放器的时候,有时候需要使用其它的应用,这时候又想播放器继续播放视频,又不想应用被杀掉,这个时候会悬浮窗功能。

使用过程中会遇到不能播播放的问题,建议按照以下的方式排查

1.手机本地悬浮窗权限开启

检查手机设置里悬浮窗权限有没有开启,各个手机开启悬浮窗口权限都不同,可以自己网上查下

2.检查代码的中的悬浮窗权限

2.1如果是在Android4.x的情况,只用在AndroidManifest.xml中添加权限:

<!-- 显示系统窗口权限 -->

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

<!-- 在 屏幕最顶部显示addview-->

<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />

2.2andriod6.0需要申请悬浮窗权限 api>23 demo中对应悬浮窗的权限说明

不同的手机对应不同的api 会出现不同的悬浮窗问题,这是由于andriod系统导致的,看下你手机对应下图中的api等级

2.3 andriod8.0以上手机报错

  android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootlmpl$W@40ec8528 -- permission denied for this window

Android O 系统,针对 Android 8.0 或更高平台版本进行编译,或将 targetSdkVersion 设为 Android 8.0 或更高版本的应用开发是,只要区别设置即可

if (Build.VERSION.SDK_INT>=26) {//8.0新特性

    mWindowParams.type= WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;

}else{

    mWindowParams.type= WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;

}

3.是否启用了悬浮窗格式

你使用的超级播放器中的SuperPlayerGlobalConfig中是否启用了悬浮窗格式

4.关闭悬浮窗

使用demo在你的机型能否支持,如果demo也不能在你的手机使用悬浮窗播放,由于andriod系统不支持悬浮功能

,这时候想关闭悬浮窗能力怎么办?办法如下

SuperPlayerView类 第792行的方法最前面增加

public void onRequestPlayMode(int requestPlayMode) {

// 屏蔽悬浮窗模式代码

if (requestPlayMode == SuperPlayerConst.PLAYMODE_FLOAT) {

Context viewContext = SuperPlayerView.this.getContext();

if (viewContext instanceof Activity) {

((Activity) viewContext).finish();

return;

}

}

//......

}

SuperPlayerActivity 这个类第726行 showFloatWindow 改为如下实现

private void showFloatWindow() {

finish(); // 结束当前activity

}

5.原理引入

悬浮窗本质手机原生的WindowManager来实现的,悬浮窗需要在别的应用之上显示窗口控件,需要某些权限才可以,API Level>=23 需要在AndriodManefest.xml文件中声明权限SYSTEM_ALERT_WINDOW才能在其他应用上绘制控件。除了在其他应用上设置悬浮窗还需要对本应用进行设置悬浮窗权限,该权限在应用中手动设置如图中的new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION)

注意的是andriod8.0之前,悬浮窗口设置可以为TYPE_PHONE,这种类型是用于用户交互操作的非应用窗口,

andriod8.0对系统和api行为做了修改,要实现在其他应用和窗口上方显示提醒窗口,必须为TYPE_APPLICATION_OVERLAY

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.手机本地悬浮窗权限开启
  • 2.检查代码的中的悬浮窗权限
    • 2.1如果是在Android4.x的情况,只用在AndroidManifest.xml中添加权限:
      • 2.2andriod6.0需要申请悬浮窗权限 api>23 demo中对应悬浮窗的权限说明
        • 2.3 andriod8.0以上手机报错
        • 3.是否启用了悬浮窗格式
        • 4.关闭悬浮窗
        • 5.原理引入
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档