提交 7fc57eec authored 作者: kongdywang's avatar kongdywang

Fix IOS audio preemption issue & Android brightness issue

上级 a994d9de
......@@ -474,6 +474,16 @@ public class SuperPlayerPlugin implements FlutterPlugin, ActivityAware,
return doubleMsg;
}
@NonNull
@Override
public DoubleMsg getSysBrightness() {
float brightness = getSystemScreenBrightness();
BigDecimal bigDecimal = BigDecimal.valueOf(brightness);
DoubleMsg doubleMsg = new DoubleMsg();
doubleMsg.setValue(bigDecimal.doubleValue());
return doubleMsg;
}
@Override
public void setSystemVolume(@NonNull DoubleMsg volume) {
mTxAudioManager.setSystemVolume(volume.getValue());
......
......@@ -29,7 +29,6 @@ NSString *const NOTIFCATION_NAME = @"SystemVolumeDidChange";
}
audioSession = [AVAudioSession sharedInstance];
[audioSession setActive:true error:nil];
}
return self;
};
......@@ -44,6 +43,8 @@ NSString *const NOTIFCATION_NAME = @"SystemVolumeDidChange";
{
// 需要设置 showsVolumeSlider 为 YES
volumeView.showsVolumeSlider = YES;
// 获取音频焦点
[audioSession setActive:true error:nil];
[_volumeSlider setValue:value animated:NO];
[_volumeSlider sendActionsForControlEvents:UIControlEventTouchUpInside];
[_volumeSlider sizeToFit];
......@@ -51,6 +52,8 @@ NSString *const NOTIFCATION_NAME = @"SystemVolumeDidChange";
- (void)setVolumeUIVisible:(BOOL)volumeUIVisible
{
// 获取音频焦点
[audioSession setActive:true error:nil];
volumeView.hidden = !volumeUIVisible;
}
......
......@@ -306,6 +306,11 @@ SuperPlayerPlugin* instance;
return [CommonUtil doubleMsgWith:brightness.doubleValue];
}
- (DoubleMsg *)getSysBrightnessWithError:(FlutterError * _Nullable __autoreleasing *)error {
NSNumber *brightness = [NSNumber numberWithFloat:[UIScreen mainScreen].brightness];
return [CommonUtil doubleMsgWith:brightness.doubleValue];
}
- (nullable DoubleMsg *)getSystemVolumeWithError:(FlutterError * _Nullable __autoreleasing * _Nonnull)error {
NSNumber *volume = [NSNumber numberWithFloat:[audioManager getVolume]];
return [CommonUtil doubleMsgWith:volume.doubleValue];
......
// // Copyright (c) 2022 Tencent. All rights reserved.
// Autogenerated from Pigeon (v9.0.4), do not edit directly.
// Autogenerated from Pigeon (v9.1.0), do not edit directly.
// See also: https://pub.dev/packages/pigeon
#import <Foundation/Foundation.h>
......@@ -35,7 +35,7 @@ NS_ASSUME_NONNULL_BEGIN
@class MapMsg;
/// pigeon原始原件,由此文件生成messages原生通信代码
/// 生成命令如下
/// 生成命令如下,使用生成命令的时候,需要实现注释掉以上两个import导入
@interface PlayerMsg : NSObject
+ (instancetype)makeWithPlayerId:(nullable NSNumber *)playerId;
@property(nonatomic, strong, nullable) NSNumber * playerId;
......@@ -365,6 +365,10 @@ NSObject<FlutterMessageCodec> *TXFlutterNativeAPIGetCodec(void);
///
/// @return `nil` only when `error != nil`.
- (nullable DoubleMsg *)getBrightnessWithError:(FlutterError *_Nullable *_Nonnull)error;
/// 获取系统界面亮度,IOS系统与界面亮度一致,安卓可能会有差异
///
/// @return `nil` only when `error != nil`.
- (nullable DoubleMsg *)getSysBrightnessWithError:(FlutterError *_Nullable *_Nonnull)error;
/// 设置当前系统音量,0.0 ~ 1.0
- (void)setSystemVolumeVolume:(DoubleMsg *)volume error:(FlutterError *_Nullable *_Nonnull)error;
/// 获得当前系统音量,范围:0.0 ~ 1.0
......
// // Copyright (c) 2022 Tencent. All rights reserved.
// Autogenerated from Pigeon (v9.0.4), do not edit directly.
// Autogenerated from Pigeon (v9.1.0), do not edit directly.
// See also: https://pub.dev/packages/pigeon
#import "FtxMessages.h"
......@@ -1291,6 +1291,24 @@ void TXFlutterNativeAPISetup(id<FlutterBinaryMessenger> binaryMessenger, NSObjec
[channel setMessageHandler:nil];
}
}
/// 获取系统界面亮度,IOS系统与界面亮度一致,安卓可能会有差异
{
FlutterBasicMessageChannel *channel =
[[FlutterBasicMessageChannel alloc]
initWithName:@"dev.flutter.pigeon.TXFlutterNativeAPI.getSysBrightness"
binaryMessenger:binaryMessenger
codec:TXFlutterNativeAPIGetCodec()];
if (api) {
NSCAssert([api respondsToSelector:@selector(getSysBrightnessWithError:)], @"TXFlutterNativeAPI api (%@) doesn't respond to @selector(getSysBrightnessWithError:)", api);
[channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
FlutterError *error;
DoubleMsg *output = [api getSysBrightnessWithError:&error];
callback(wrapResult(output, error));
}];
} else {
[channel setMessageHandler:nil];
}
}
/// 设置当前系统音量,0.0 ~ 1.0
{
FlutterBasicMessageChannel *channel =
......
......@@ -2,7 +2,7 @@
import 'package:pigeon/pigeon.dart';
import 'package:super_player/super_player.dart';
/// pigeon原始原件,由此文件生成messages原生通信代码
/// 生成命令如下
/// 生成命令如下,使用生成命令的时候,需要实现注释掉以上两个import导入
/*
flutter pub run pigeon \
--input lib/Core/pigeons/txplayer_message.dart \
......@@ -335,6 +335,9 @@ abstract class TXFlutterNativeAPI {
/// 获得当前界面亮度 0.0 ~ 1.0
DoubleMsg getBrightness();
/// 获取系统界面亮度,IOS系统与界面亮度一致,安卓可能会有差异
DoubleMsg getSysBrightness();
/// 设置当前系统音量,0.0 ~ 1.0
void setSystemVolume(DoubleMsg volume);
......
......@@ -130,6 +130,12 @@ class SuperPlayerPlugin {
return doubleMsg.value;
}
/// 获取系统界面亮度,IOS系统与界面亮度一致,安卓可能会有差异 范围:0.0 ~ 1.0
static Future<double?> getSysBrightness() async {
DoubleMsg doubleMsg = await _nativeAPI.getSysBrightness();
return doubleMsg.value;
}
/// 设置当前系统音量,0.0 ~ 1.0
static Future<void> setSystemVolume(double volume) async {
return await _nativeAPI.setSystemVolume(DoubleMsg()..value = volume);
......
// // Copyright (c) 2022 Tencent. All rights reserved.
// Copyright (c) 2022 Tencent. All rights reserved.
part of SuperPlayer;
// Autogenerated from Pigeon (v9.0.4), do not edit directly.
// See also: https://pub.dev/packages/pigeon
// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
/// pigeon原始原件,由此文件生成messages原生通信代码
/// 生成命令如下
/// 生成命令如下,使用生成命令的时候,需要实现注释掉以上两个import导入
class PlayerMsg {
PlayerMsg({
this.playerId,
......@@ -1290,6 +1288,34 @@ class TXFlutterNativeAPI {
}
}
/// 获取系统界面亮度,IOS系统与界面亮度一致,安卓可能会有差异
Future<DoubleMsg> getSysBrightness() async {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.TXFlutterNativeAPI.getSysBrightness', codec,
binaryMessenger: _binaryMessenger);
final List<Object?>? replyList =
await channel.send(null) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyList.length > 1) {
throw PlatformException(
code: replyList[0]! as String,
message: replyList[1] as String?,
details: replyList[2],
);
} else if (replyList[0] == null) {
throw PlatformException(
code: 'null-error',
message: 'Host platform returned null value for non-null return value.',
);
} else {
return (replyList[0] as DoubleMsg?)!;
}
}
/// 设置当前系统音量,0.0 ~ 1.0
Future<void> setSystemVolume(DoubleMsg arg_volume) async {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
......
......@@ -320,6 +320,7 @@ class SuperPlayerViewState extends State<SuperPlayerView> with WidgetsBindingObs
// 页面从后台回来
// 不更新状态,直接resume
_playController.getCurrentController().resume();
checkBrightness();
// 从后台回来之后,如果手机横竖屏状态发生更改,被改为竖屏,那么这里根据判断切换横屏
if (_playController._playerUIStatus == SuperPlayerUIStatus.FULLSCREEN_MODE &&
defaultTargetPlatform == TargetPlatform.iOS) {
......@@ -337,6 +338,14 @@ class SuperPlayerViewState extends State<SuperPlayerView> with WidgetsBindingObs
}
}
void checkBrightness() async {
double? sysBrightness = await SuperPlayerPlugin.getSysBrightness();
double? windowBrightness = await SuperPlayerPlugin.getBrightness();
if(sysBrightness != windowBrightness && null != sysBrightness) {
SuperPlayerPlugin.setBrightness(sysBrightness);
}
}
void _calculateSize(double videoWidth, double videoHeight) {
if (mounted && (0 != videoWidth && 0 != videoHeight) &&
(_videoWidth != videoWidth && _videoHeight != videoHeight)) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论