Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
T
tx_player_fork
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蒋俊
tx_player_fork
Commits
1d584a00
提交
1d584a00
authored
1月 17, 2023
作者:
kongdywang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix android 12 pip restore problem
上级
3ad3539b
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
100 行增加
和
20 行删除
+100
-20
AndroidManifest.xml
Flutter/android/src/main/AndroidManifest.xml
+3
-1
FTXPIPManager.java
.../src/main/java/com/tencent/vod/flutter/FTXPIPManager.java
+2
-3
SuperPlayerPlugin.java
.../main/java/com/tencent/vod/flutter/SuperPlayerPlugin.java
+8
-8
Android12BridgeService.java
...va/com/tencent/vod/flutter/ui/Android12BridgeService.java
+27
-0
FlutterPipImplActivity.java
...va/com/tencent/vod/flutter/ui/FlutterPipImplActivity.java
+56
-7
styles.xml
Flutter/android/src/main/res/values/styles.xml
+4
-1
没有找到文件。
Flutter/android/src/main/AndroidManifest.xml
浏览文件 @
1d584a00
...
@@ -14,7 +14,6 @@
...
@@ -14,7 +14,6 @@
android:resizeableActivity=
"true"
android:resizeableActivity=
"true"
android:launchMode=
"singleTask"
android:launchMode=
"singleTask"
android:configChanges=
"orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:configChanges=
"orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated=
"true"
android:windowSoftInputMode=
"stateHidden"
android:windowSoftInputMode=
"stateHidden"
tools:ignore=
"UnusedAttribute"
>
tools:ignore=
"UnusedAttribute"
>
<intent-filter>
<intent-filter>
...
@@ -23,6 +22,8 @@
...
@@ -23,6 +22,8 @@
<action
android:name=
"com.tencent.flutter.updatePip"
/>
<action
android:name=
"com.tencent.flutter.updatePip"
/>
</intent-filter>
</intent-filter>
</activity>
</activity>
<service
android:name=
"com.tencent.vod.flutter.ui.Android12BridgeService"
/>
</application>
</application>
</manifest>
</manifest>
\ No newline at end of file
Flutter/android/src/main/java/com/tencent/vod/flutter/FTXPIPManager.java
浏览文件 @
1d584a00
...
@@ -43,7 +43,6 @@ import java.util.Map;
...
@@ -43,7 +43,6 @@ import java.util.Map;
public
class
FTXPIPManager
{
public
class
FTXPIPManager
{
private
static
final
String
TAG
=
"FTXPIPManager"
;
private
static
final
String
TAG
=
"FTXPIPManager"
;
private
static
final
int
REQUEST_PIP_CODE
=
1
;
private
boolean
misInit
=
false
;
private
boolean
misInit
=
false
;
private
final
Map
<
Integer
,
PipCallback
>
pipCallbacks
=
new
HashMap
<>();
private
final
Map
<
Integer
,
PipCallback
>
pipCallbacks
=
new
HashMap
<>();
...
@@ -142,7 +141,7 @@ public class FTXPIPManager {
...
@@ -142,7 +141,7 @@ public class FTXPIPManager {
intent
.
setAction
(
FTXEvent
.
PIP_ACTION_START
);
intent
.
setAction
(
FTXEvent
.
PIP_ACTION_START
);
intent
.
putExtra
(
FTXEvent
.
EXTRA_NAME_PARAMS
,
params
);
intent
.
putExtra
(
FTXEvent
.
EXTRA_NAME_PARAMS
,
params
);
intent
.
putExtra
(
FTXEvent
.
EXTRA_NAME_VIDEO
,
videoModel
);
intent
.
putExtra
(
FTXEvent
.
EXTRA_NAME_VIDEO
,
videoModel
);
mActivityBinding
.
getActivity
().
startActivity
ForResult
(
intent
,
REQUEST_PIP_CODE
);
mActivityBinding
.
getActivity
().
startActivity
(
intent
);
mIsInPipMode
=
true
;
mIsInPipMode
=
true
;
}
}
return
pipResult
;
return
pipResult
;
...
@@ -380,7 +379,7 @@ public class FTXPIPManager {
...
@@ -380,7 +379,7 @@ public class FTXPIPManager {
actions
.
add
(
nextAction
);
actions
.
add
(
nextAction
);
}
}
PictureInPictureParams
.
Builder
mPipParams
=
new
Builder
();
Builder
mPipParams
=
new
Builder
();
mPipParams
.
setActions
(
actions
);
mPipParams
.
setActions
(
actions
);
return
mPipParams
.
build
();
return
mPipParams
.
build
();
}
}
...
...
Flutter/android/src/main/java/com/tencent/vod/flutter/SuperPlayerPlugin.java
浏览文件 @
1d584a00
...
@@ -15,17 +15,10 @@ import android.util.SparseArray;
...
@@ -15,17 +15,10 @@ import android.util.SparseArray;
import
android.view.OrientationEventListener
;
import
android.view.OrientationEventListener
;
import
android.view.Window
;
import
android.view.Window
;
import
android.view.WindowManager
;
import
android.view.WindowManager
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.NonNull
;
import
com.tencent.rtmp.TXLiveBase
;
import
com.tencent.rtmp.TXLiveBase
;
import
com.tencent.rtmp.TXPlayerGlobalSetting
;
import
com.tencent.rtmp.TXPlayerGlobalSetting
;
import
com.tencent.vod.flutter.ui.Android12BridgeService
;
import
java.io.File
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Set
;
import
io.flutter.embedding.engine.plugins.FlutterPlugin
;
import
io.flutter.embedding.engine.plugins.FlutterPlugin
;
import
io.flutter.embedding.engine.plugins.activity.ActivityAware
;
import
io.flutter.embedding.engine.plugins.activity.ActivityAware
;
import
io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding
;
import
io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding
;
...
@@ -34,6 +27,10 @@ import io.flutter.plugin.common.MethodCall;
...
@@ -34,6 +27,10 @@ import io.flutter.plugin.common.MethodCall;
import
io.flutter.plugin.common.MethodChannel
;
import
io.flutter.plugin.common.MethodChannel
;
import
io.flutter.plugin.common.MethodChannel.MethodCallHandler
;
import
io.flutter.plugin.common.MethodChannel.MethodCallHandler
;
import
io.flutter.plugin.common.MethodChannel.Result
;
import
io.flutter.plugin.common.MethodChannel.Result
;
import
java.io.File
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Set
;
/**
/**
* SuperPlayerPlugin
* SuperPlayerPlugin
...
@@ -286,6 +283,9 @@ public class SuperPlayerPlugin implements FlutterPlugin, MethodCallHandler, Acti
...
@@ -286,6 +283,9 @@ public class SuperPlayerPlugin implements FlutterPlugin, MethodCallHandler, Acti
if
(
null
!=
mTxPipManager
)
{
if
(
null
!=
mTxPipManager
)
{
mTxPipManager
.
releaseActivityListener
();
mTxPipManager
.
releaseActivityListener
();
}
}
// 关闭用于解决Android12部分版本上画中画点击还原失灵的问题
Intent
serviceIntent
=
new
Intent
(
mActivityPluginBinding
.
getActivity
(),
Android12BridgeService
.
class
);
mActivityPluginBinding
.
getActivity
().
stopService
(
serviceIntent
);
unregisterReceiver
();
unregisterReceiver
();
}
}
...
...
Flutter/android/src/main/java/com/tencent/vod/flutter/ui/Android12BridgeService.java
0 → 100644
浏览文件 @
1d584a00
package
com
.
tencent
.
vod
.
flutter
.
ui
;
import
android.app.Service
;
import
android.content.Intent
;
import
android.os.Binder
;
import
android.os.IBinder
;
import
androidx.annotation.Nullable
;
/**
* 为了解决多次打开画中画的时候,启动画中画被认为是后台启动,导致无法启动的问题。
* 该问题出现于android 12版本上,目前只在MIUI的android 12版本上发现该问题。
*/
public
class
Android12BridgeService
extends
Service
{
@Nullable
@Override
public
IBinder
onBind
(
Intent
intent
)
{
return
new
Android12BridgeServiceBinder
();
}
class
Android12BridgeServiceBinder
extends
Binder
{
public
Android12BridgeService
getService
()
{
return
Android12BridgeService
.
this
;
}
}
}
Flutter/android/src/main/java/com/tencent/vod/flutter/ui/FlutterPipImplActivity.java
浏览文件 @
1d584a00
...
@@ -5,14 +5,17 @@ package com.tencent.vod.flutter.ui;
...
@@ -5,14 +5,17 @@ package com.tencent.vod.flutter.ui;
import
android.app.PictureInPictureParams
;
import
android.app.PictureInPictureParams
;
import
android.app.PictureInPictureUiState
;
import
android.app.PictureInPictureUiState
;
import
android.content.BroadcastReceiver
;
import
android.content.BroadcastReceiver
;
import
android.content.ComponentName
;
import
android.content.Context
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.content.Intent
;
import
android.content.IntentFilter
;
import
android.content.IntentFilter
;
import
android.content.ServiceConnection
;
import
android.content.res.Configuration
;
import
android.content.res.Configuration
;
import
android.os.Build
;
import
android.os.Build
;
import
android.os.Build.VERSION
;
import
android.os.Build.VERSION
;
import
android.os.Build.VERSION_CODES
;
import
android.os.Build.VERSION_CODES
;
import
android.os.Bundle
;
import
android.os.Bundle
;
import
android.os.IBinder
;
import
android.text.TextUtils
;
import
android.text.TextUtils
;
import
android.util.Log
;
import
android.util.Log
;
import
android.view.Surface
;
import
android.view.Surface
;
...
@@ -30,13 +33,13 @@ import com.tencent.rtmp.TXPlayInfoParams;
...
@@ -30,13 +33,13 @@ import com.tencent.rtmp.TXPlayInfoParams;
import
com.tencent.rtmp.TXVodPlayer
;
import
com.tencent.rtmp.TXVodPlayer
;
import
com.tencent.vod.flutter.FTXEvent
;
import
com.tencent.vod.flutter.FTXEvent
;
import
com.tencent.vod.flutter.FTXPIPManager.PipParams
;
import
com.tencent.vod.flutter.FTXPIPManager.PipParams
;
import
com.tencent.vod.flutter.R
;
import
com.tencent.vod.flutter.model.PipResult
;
import
com.tencent.vod.flutter.model.PipResult
;
import
com.tencent.vod.flutter.model.VideoModel
;
import
com.tencent.vod.flutter.model.VideoModel
;
import
com.tencent.vod.flutter.R
;
import
io.flutter.embedding.android.FlutterActivity
;
import
io.flutter.embedding.android.FlutterActivity
;
public
class
FlutterPipImplActivity
extends
FlutterActivity
implements
Callback
,
ITXVodPlayListener
,
public
class
FlutterPipImplActivity
extends
FlutterActivity
implements
Callback
,
ITXVodPlayListener
,
ITXLivePlayListener
{
ITXLivePlayListener
,
ServiceConnection
{
private
static
final
String
TAG
=
"FlutterPipImplActivity"
;
private
static
final
String
TAG
=
"FlutterPipImplActivity"
;
...
@@ -114,6 +117,7 @@ public class FlutterPipImplActivity extends FlutterActivity implements Callback,
...
@@ -114,6 +117,7 @@ public class FlutterPipImplActivity extends FlutterActivity implements Callback,
mVideoSurface
.
getHolder
().
addCallback
(
this
);
mVideoSurface
.
getHolder
().
addCallback
(
this
);
setVodPlayerListener
();
setVodPlayerListener
();
setLivePlayerListener
();
setLivePlayerListener
();
bindAndroid12BugServiceIfNeed
();
}
}
private
void
setVodPlayerListener
()
{
private
void
setVodPlayerListener
()
{
...
@@ -228,8 +232,7 @@ public class FlutterPipImplActivity extends FlutterActivity implements Callback,
...
@@ -228,8 +232,7 @@ public class FlutterPipImplActivity extends FlutterActivity implements Callback,
}
}
int
codeEvent
=
mIsNeedToStop
?
FTXEvent
.
EVENT_PIP_MODE_ALREADY_EXIT
:
FTXEvent
.
EVENT_PIP_MODE_RESTORE_UI
;
int
codeEvent
=
mIsNeedToStop
?
FTXEvent
.
EVENT_PIP_MODE_ALREADY_EXIT
:
FTXEvent
.
EVENT_PIP_MODE_RESTORE_UI
;
sendPipBroadCast
(
codeEvent
,
data
);
sendPipBroadCast
(
codeEvent
,
data
);
overridePendingTransition
(
0
,
0
);
exitPip
(
codeEvent
==
FTXEvent
.
EVENT_PIP_MODE_ALREADY_EXIT
);
finish
();
}
}
@Override
@Override
...
@@ -244,7 +247,7 @@ public class FlutterPipImplActivity extends FlutterActivity implements Callback,
...
@@ -244,7 +247,7 @@ public class FlutterPipImplActivity extends FlutterActivity implements Callback,
if
(
TextUtils
.
equals
(
action
,
FTXEvent
.
PIP_ACTION_START
))
{
if
(
TextUtils
.
equals
(
action
,
FTXEvent
.
PIP_ACTION_START
))
{
startPipVideoFromIntent
(
intent
);
startPipVideoFromIntent
(
intent
);
}
else
if
(
TextUtils
.
equals
(
action
,
FTXEvent
.
PIP_ACTION_EXIT
))
{
}
else
if
(
TextUtils
.
equals
(
action
,
FTXEvent
.
PIP_ACTION_EXIT
))
{
exitPip
();
exitPip
(
false
);
}
else
if
(
TextUtils
.
equals
(
action
,
FTXEvent
.
PIP_ACTION_UPDATE
))
{
}
else
if
(
TextUtils
.
equals
(
action
,
FTXEvent
.
PIP_ACTION_UPDATE
))
{
PipParams
pipParams
=
intent
.
getParcelableExtra
(
FTXEvent
.
EXTRA_NAME_PARAMS
);
PipParams
pipParams
=
intent
.
getParcelableExtra
(
FTXEvent
.
EXTRA_NAME_PARAMS
);
updatePip
(
pipParams
);
updatePip
(
pipParams
);
...
@@ -263,8 +266,32 @@ public class FlutterPipImplActivity extends FlutterActivity implements Callback,
...
@@ -263,8 +266,32 @@ public class FlutterPipImplActivity extends FlutterActivity implements Callback,
}
}
}
}
private
void
exitPip
()
{
/**
finish
();
* 关闭画中画,使用finish当前界面的方式,关闭画中画
*
* @param closeImmediately 立刻关闭,不执行延迟,在android 12以上,如果画中画处于非当前app界面下,立刻关闭可能会造成无法返回app问题
*/
private
void
exitPip
(
boolean
closeImmediately
)
{
if
(!
isFinishing
()
&&
!
isDestroyed
())
{
// 由于android 12 的前台服务启动限制,导致画中画返回后,过早关闭activity界面的话,无法正常拉起app。所以这里增加延时处理
if
(
Build
.
VERSION
.
SDK_INT
>=
VERSION_CODES
.
S
&&
!
closeImmediately
)
{
mVodPlayer
.
stopPlay
(
true
);
mLivePlayer
.
stopPlay
(
true
);
mVideoSurface
.
setVisibility
(
View
.
GONE
);
mVideoProgress
.
setVisibility
(
View
.
GONE
);
mVideoProgress
.
postDelayed
(
new
Runnable
()
{
@Override
public
void
run
()
{
overridePendingTransition
(
0
,
0
);
finish
();
}
},
400
);
}
else
{
overridePendingTransition
(
0
,
0
);
finish
();
}
}
}
}
private
void
startPipVideoFromIntent
(
Intent
intent
)
{
private
void
startPipVideoFromIntent
(
Intent
intent
)
{
...
@@ -337,9 +364,21 @@ public class FlutterPipImplActivity extends FlutterActivity implements Callback,
...
@@ -337,9 +364,21 @@ public class FlutterPipImplActivity extends FlutterActivity implements Callback,
@Override
@Override
protected
void
onDestroy
()
{
protected
void
onDestroy
()
{
unRegisterPipBroadcast
();
unRegisterPipBroadcast
();
if
(
Build
.
VERSION
.
SDK_INT
>=
VERSION_CODES
.
S
)
{
unbindService
(
this
);
}
super
.
onDestroy
();
super
.
onDestroy
();
}
}
private
void
bindAndroid12BugServiceIfNeed
()
{
if
(
Build
.
VERSION
.
SDK_INT
>=
VERSION_CODES
.
S
)
{
Intent
serviceIntent
=
new
Intent
(
this
,
Android12BridgeService
.
class
);
startService
(
serviceIntent
);
bindService
(
serviceIntent
,
this
,
Context
.
BIND_AUTO_CREATE
);
}
}
private
void
attachSurface
(
Surface
surface
)
{
private
void
attachSurface
(
Surface
surface
)
{
if
(
null
!=
mVideoModel
)
{
if
(
null
!=
mVideoModel
)
{
if
(
mVideoModel
.
getPlayerType
()
==
FTXEvent
.
PLAYER_VOD
)
{
if
(
mVideoModel
.
getPlayerType
()
==
FTXEvent
.
PLAYER_VOD
)
{
...
@@ -455,4 +494,13 @@ public class FlutterPipImplActivity extends FlutterActivity implements Callback,
...
@@ -455,4 +494,13 @@ public class FlutterPipImplActivity extends FlutterActivity implements Callback,
@Override
@Override
public
void
onNetStatus
(
Bundle
bundle
)
{
public
void
onNetStatus
(
Bundle
bundle
)
{
}
}
@Override
public
void
onServiceConnected
(
ComponentName
name
,
IBinder
service
)
{
}
@Override
public
void
onServiceDisconnected
(
ComponentName
name
)
{
}
}
}
\ No newline at end of file
Flutter/android/src/main/res/values/styles.xml
浏览文件 @
1d584a00
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<resources
xmlns:tools=
"http://schemas.android.com/tools"
>
<!-- 取消界面转场动画使用-->
<!-- 取消界面转场动画使用-->
<style
name=
"Theme"
parent=
"android:Theme.Translucent.NoTitleBar.Fullscreen"
>
<style
name=
"Theme"
parent=
"android:Theme.Translucent.NoTitleBar.Fullscreen"
>
<item
name=
"android:windowAnimationStyle"
>
@style/Animation
</item>
<item
name=
"android:windowAnimationStyle"
>
@style/Animation
</item>
<item
name=
"android:background"
>
@android:color/transparent
</item>
<item
name=
"android:background"
>
@android:color/transparent
</item>
<item
name=
"android:windowIsTranslucent"
>
true
</item>
<item
name=
"android:windowIsTranslucent"
>
true
</item>
<item
name=
"android:windowBackground"
>
@android:color/transparent
</item>
<item
name=
"android:windowBackground"
>
@android:color/transparent
</item>
<item
name=
"android:windowActivityTransitions"
tools:targetApi=
"lollipop"
>
false
</item>
<item
name=
"android:windowEnterTransition"
tools:targetApi=
"lollipop"
>
@null
</item>
<item
name=
"android:windowExitTransition"
tools:targetApi=
"lollipop"
>
@null
</item>
</style>
</style>
<style
name=
"Animation"
>
<style
name=
"Animation"
>
<item
name=
"android:activityOpenEnterAnimation"
>
@null
</item>
<item
name=
"android:activityOpenEnterAnimation"
>
@null
</item>
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论