코드 를 통 해 시스템 볼 륨 을 조정 하고 볼 륨 실체 버튼 사건 을 감청 합 니 다.
23147 단어 멀티미디어
비록
AVPlayer
과 AVPAudiolayer
이런 종류 가 음량 조절 기능 을 제 공 했 지만 이런 음량 제 어 는 앱 등급 의 제어 에 속한다.좋 은 점 은 볼 륨 조절 이 시스템 볼 륨 에 독립 되 어 큰 시간 동안 시스템 볼 륨 에 영향 을 주지 않 는 다 는 것 이다.그러나 때때로 우 리 는 소 리 를 조절 할 때 시스템 볼 륨 이 너무 작 으 면 앱 의 볼 륨 조절 효과 가 뚜렷 하지 않 지 않도록 시스템 볼 륨 을 수정 하고 싶 을 수도 있다.1. 핸드폰 실체 볼 륨 버튼 감청
- (void)registeNotification{images
//1. ,
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(volumeChanged:) name:@"AVSystemController_SystemVolumeDidChangeNotification" object:nil];
// UIApplication , ,
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
}
- (void)volumeChanged:(NSNotification *)notification{
//2.
float volume = [[[notification userInfo] objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"] floatValue];
//do something here
}
- (void) removeNotification{
//3.
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"AVSystemController_SystemVolumeDidChangeNotification" object:nil];
}
//
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
비록 효과 가 있 지만 문제 가 생 겼 다
\ # \ # \ # 1. 실체 키 를 눌 렀 을 때 시스템 의 '벨 소리' 가 나 고 '볼 륨' 을 표시 하고 싶 습 니 다.
이 때 코드 를 추가 하면 이 페이지 에서 소리 대신 볼 륨 실체 키 를 누 르 면 볼 륨 을 표시 할 수 있 습 니 다.
// “ ” ” ”
[[AVAudioSession sharedInstance] setActive:YES error:NULL];
2. '볼 륨' 이 나 왔 지만 잠 금 화면, 백 스테이지 진입 등 으로 인해 ResignActive 가 다시 활성화 되면 '볼 륨' 이 아 닌 '벨 소리' 가 표 시 됩 니 다.
이것 은 프로그램 이 백 엔 드 에 들 어간 후에 상기 코드 [AVAudio Session shared Instance] 가 더 이상 Active 상태 가 아니 기 때문에
AppDelegate.m
에 다시 설정 해 야 합 니 다. 그러면 '볼 륨' 에 계속 응답 할 수 있 습 니 다. 예 를 들 어: AppDelegate.m
- (void)applicationWillEnterForeground:(UIApplication *)application {
// , “ ” “ ”
[[AVAudioSession sharedInstance] setActive:YES error:NULL];
}
3. 나 는 '볼 륨' 이 나 오고 싶 지 않다.
이 럴 때 써 야 돼 요.
MPVolumeView
'볼 륨' 을 표시 하지 않 을 뿐만 아니 라 휴대 전화 볼 륨 설정 도 수정 할 수 있다.이 방법 은 애플 이 공식 적 으로 추천 한 방법 이다.MPVolumeView 는
Media Player Framework
의 UI 구성 요소 로 시스템 볼 륨 과 Airplay 장치 의 오디 오 미 러 경로 에 대한 제어 기능 을 직접 포함 합 니 다.볼 륨 을 조절 하기 위해 MPVolumeSlider 의 subview 를 포함 하고 있 습 니 다.이것 MPVolumeSlider
은 개인 클래스 입 니 다. 수 동 으로 만 들 수 없 지만, 이것 은 UISlider 의 하위 클래스 입 니 다.MPVolumeView 의 사용 은 간단 합 니 다. 부모 보기 에 넣 고 부모 보기 에 적당 한 크기 를 주 고 MPVolumeView 예제 를 만 들 고 부모 보기 에 넣 으 면 됩 니 다. 애플 공식 문서 에 예제 코드 가 있 으 면 참고 할 수 있 습 니 다. volumeView.frame = CGRectMake(-1000, -100, 100, 100);
hidden
속성 값 을 NO 로 확보 합 니 다.hidden 이 YES 일 때 도 알림 이 뜨 기 때문이다."볼 륨 알림 상자" 를 숨 기 려 면 다음 코드 를 추가 하면 됩 니 다.
// " "
// `MediaPlayer.framework`
MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:CGRectMake(-100, -100, 100, 100)];
volumeView.hidden = NO;
[self.view addSubview:volumeView];
코드 는 시스템 볼 륨 을 조절 하고 실체 버튼 을 통과 하지 않 습 니 다.
위 에서 우 리 는 MPVolumeView 라 는 구성 요소 중 하나 인 subview 가 볼 륨 을 조절 하 는 것, 즉 MPVolumeSlider 를 언급 했다.따라서 우 리 는 MPVolumeView 인 스 턴 스 를 옮 겨 다 니 는 subviews 를 통 해 MPVolumeSlider 의 인 스 턴 스 를 얻 고 이 UI 구성 요 소 를 통 해 시스템 볼 륨 을 조작 할 수 있 습 니 다.
volumeSlider.value
이 속성 을 통 해 현재 시스템 볼 륨 을 얻 을 수 있 습 니 다.setValue:animated:
방법 으로 시스템 볼 륨 구체 적 인 코드 는 다음 과 같다.
- (void)viewDidLoad {
[super viewDidLoad];
// “ ”, “ ”
[[AVAudioSession sharedInstance] setActive:YES error:NULL];
//1. MPVolumeView ,
MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:CGRectMake(-100, -100, 100, 100)];
//volumeView.hidden = NO;
//[self.view addSubview:volumeView]; // “ ”
volumeViewSlider = nil;
//2. MPVolumeView subViews MPVolumeSlider
for (UIView *view in [volumeView subviews]){
if ([view.class.description isEqualToString:@"MPVolumeSlider"]){
volumeViewSlider = (UISlider*)view;
break;
}
}
//3.
float systemVolume = volumeViewSlider.value;
//4. slider,
VolSlider = [[UISlider alloc] initWithFrame:CGRectMake(30, 200, 300, 20)];
VolSlider.value = systemVolume; //
[VolSlider setMinimumValue:0.0]; //
[VolSlider setMaximumValue:1.0]; //
[VolSlider addTarget:self action:@selector(sliderValueChange:) forControlEvents:UIControlEventValueChanged]; //
[self.view addSubview:VolSlider];
//
[self registeNotification];
}
//
//VolSlider
- (void)sliderValueChange:(UISlider *)slider{
// value
float value = slider.value;
// , 0.0 - 1.0
[volumeViewSlider setValue:value animated:NO];
// setValue ,
[volumeViewSlider sendActionsForControlEvents:UIControlEventTouchUpInside];
}
//
// ,
- (void)volumeChanged:(NSNotification *)notification{
//
float volume = [[[notification userInfo] objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"] floatValue];
//
[VolSlider setValue:volume animated:YES];
}
VolSlider 를 설정 하면 시스템 의 볼 륨 알림 상자 와 동기 화 할 수 있 습 니 다. 효 과 는 다음 과 같 습 니 다.
코드 github 링크 첨부: changesystemVolume
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
멀티미디어를 지원하는 태그(1)Tag <img> 이미지 삽입 (2)Attribute src : 이미지 파일 경로 alt : 이미지 파일이 없을 경우 표시되는 문장 width: 이미지의 너미(CSS에서 지정하는 것이 일반적) height: 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.