提交 2711c048 authored 作者: kongdywang's avatar kongdywang

fix ios pip pause UI error

上级 d8f8b1cd
......@@ -26,7 +26,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import io.flutter.Log;
import android.util.Log;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
/**
......@@ -112,7 +112,7 @@ public class FTXPIPManager {
params.mPipParams = new PictureInPictureParams.Builder();
updatePipActions(isPlaying, params);
boolean enterResult = mActivity.enterPictureInPictureMode(params.mPipParams.build());
if(!enterResult) {
if (!enterResult) {
pipResult = FTXEvent.ERROR_PIP_DENIED_PERMISSION;
}
} else {
......@@ -133,7 +133,7 @@ public class FTXPIPManager {
if (!isSuccess) {
pipResult = FTXEvent.ERROR_PIP_DENIED_PERMISSION;
Log.e(TAG, "enterPip failed,because PIP feature is disabled");
} else if(!hasPipPermission()) {
} else if (!hasPipPermission()) {
pipResult = FTXEvent.ERROR_PIP_DENIED_PERMISSION;
Log.e(TAG, "enterPip failed,because PIP has no permission");
}
......@@ -153,7 +153,7 @@ public class FTXPIPManager {
AppOpsManager appOpsManager = (AppOpsManager) mActivity.getSystemService(Context.APP_OPS_SERVICE);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
int permissionResult = appOpsManager.checkOpNoThrow(AppOpsManager.OPSTR_PICTURE_IN_PICTURE,
android.os.Process.myUid(),mActivity.getPackageName());
android.os.Process.myUid(), mActivity.getPackageName());
return permissionResult == AppOpsManager.MODE_ALLOWED;
} else {
return false;
......@@ -184,16 +184,26 @@ public class FTXPIPManager {
}
private void initPipReceiver() {
try {
if (!isRegisterReceiver) {
IntentFilter pipIntentFilter = new IntentFilter(FTXEvent.ACTION_PIP_PLAY_CONTROL);
mActivity.registerReceiver(pipActionReceiver, pipIntentFilter);
isRegisterReceiver = true;
}
} catch (Exception e) {
Log.getStackTraceString(e);
}
}
public void releaseReceiver() {
try {
if (isRegisterReceiver) {
mActivity.unregisterReceiver(pipActionReceiver);
}
} catch (Exception e) {
Log.getStackTraceString(e);
}
}
/**
* 更新PIP悬浮框按钮
......@@ -207,7 +217,7 @@ public class FTXPIPManager {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
List<RemoteAction> actions = new ArrayList<>();
// play back
if(params.mIsNeedPlayBack) {
if (params.mIsNeedPlayBack) {
Bundle backData = new Bundle();
backData.putInt(FTXEvent.EXTRA_NAME_PLAY_OP, FTXEvent.EXTRA_PIP_PLAY_BACK);
backData.putInt(FTXEvent.EXTRA_NAME_PLAYER_ID, params.mCurrentPlayerId);
......@@ -219,7 +229,7 @@ public class FTXPIPManager {
}
// resume or pause
if(params.mIsNeedPlayControl) {
if (params.mIsNeedPlayControl) {
Bundle playOrPauseData = new Bundle();
playOrPauseData.putInt(FTXEvent.EXTRA_NAME_PLAYER_ID, params.mCurrentPlayerId);
playOrPauseData.putInt(FTXEvent.EXTRA_NAME_PLAY_OP, FTXEvent.EXTRA_PIP_PLAY_RESUME_OR_PAUSE);
......@@ -233,7 +243,7 @@ public class FTXPIPManager {
}
// forward
if(params.mIsNeedPlayForward) {
if (params.mIsNeedPlayForward) {
Bundle forwardData = new Bundle();
forwardData.putInt(FTXEvent.EXTRA_NAME_PLAY_OP, FTXEvent.EXTRA_PIP_PLAY_FORWARD);
forwardData.putInt(FTXEvent.EXTRA_NAME_PLAYER_ID, params.mCurrentPlayerId);
......
......@@ -29,7 +29,7 @@ android {
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.super_player_example"
applicationId "com.tencent.liteav.demo"
minSdkVersion 19
targetSdkVersion 31
versionCode flutterVersionCode.toInteger()
......
......@@ -558,12 +558,12 @@ class SuperPlayerController {
void _updatePlayerUIStatus(int status) {
if (_playerUIStatus != status) {
_playerUIStatus = status;
if (status == SuperPlayerUIStatus.FULLSCREEN_MODE) {
_addSimpleEvent(SuperPlayerViewEvent.onStartFullScreenPlay);
} else {
} else if(_playerUIStatus == SuperPlayerUIStatus.FULLSCREEN_MODE) {
_addSimpleEvent(SuperPlayerViewEvent.onStopFullScreenPlay);
}
_playerUIStatus = status;
}
}
......@@ -656,6 +656,7 @@ class SuperPlayerController {
/// seek 到需要的时间点进行播放
Future<void> seek(double progress) async {
if (playerType == SuperPlayerType.VOD) {
_needToPause = false;
await _vodPlayerController.seek(progress);
bool isPlaying = await _vodPlayerController.isPlaying();
// resume when not playing.if isPlaying is null,not resume
......
......@@ -84,8 +84,7 @@ class SuperPlayerViewState extends State<SuperPlayerView> with WidgetsBindingObs
}
});
// only register listen once
_pipSubscription =
SuperPlayerPlugin.instance.onExtraEventBroadcast.listen((event) {
_pipSubscription = SuperPlayerPlugin.instance.onExtraEventBroadcast.listen((event) {
int eventCode = event["event"];
if (eventCode == TXVodPlayEvent.EVENT_PIP_MODE_ALREADY_EXIT) {
// exit floatingMode
......@@ -96,9 +95,11 @@ class SuperPlayerViewState extends State<SuperPlayerView> with WidgetsBindingObs
_playController.getCurrentController().pause();
}
} else if (Platform.isIOS) {
_onResume();
EasyLoading.dismiss();
}
_isFloatingMode = false;
_playController._updatePlayerUIStatus(SuperPlayerUIStatus.WINDOW_MODE);
} else if (eventCode == TXVodPlayEvent.EVENT_PIP_MODE_REQUEST_START) {
// EVENT_PIP_MODE_ALREADY_ENTER 的状态变化有滞后性,进入PIP之后才会通知,这里需要监听EVENT_PIP_MODE_REQUEST_START,
// 在即将进入PIP模式下就要开始进行PIP模式的UI准备
......@@ -111,6 +112,7 @@ class SuperPlayerViewState extends State<SuperPlayerView> with WidgetsBindingObs
EasyLoading.showToast(StringResource.OPEN_PIP);
}
_isFloatingMode = true;
_playController._updatePlayerUIStatus(SuperPlayerUIStatus.PIP_MODE);
} else if (eventCode == TXVodPlayEvent.EVENT_PIP_MODE_ALREADY_ENTER) {
if (Platform.isIOS) {
EasyLoading.dismiss();
......@@ -124,11 +126,11 @@ class SuperPlayerViewState extends State<SuperPlayerView> with WidgetsBindingObs
EasyLoading.showToast(StringResource.ERROR_PIP);
}
_isFloatingMode = false;
_playController._updatePlayerUIStatus(SuperPlayerUIStatus.WINDOW_MODE);
print('$eventCode');
}
});
_volumeSubscription =
SuperPlayerPlugin.instance.onEventBroadcast.listen((event) {
_volumeSubscription = SuperPlayerPlugin.instance.onEventBroadcast.listen((event) {
int eventCode = event["event"];
if (_isFloatingMode && _isPlaying) {
if (eventCode == TXVodPlayEvent.EVENT_AUDIO_FOCUS_PAUSE) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论