Ngay cả trong ứng dụng máy ảnh mặc định trên iPhone, việc tăng/giảm âm lượng không được hỗ trợ. Có thể họ chặn đầu vào từ các nút đó khi máy ảnh được bật. Những gì họ không chặn là chuyển đổi im lặng. Tôi thêm vào thông báo này và gọi lại của tôi đã gọi ngay cả với các máy ảnh trên:
AudioSessionInitialize(nil, nil, nil, nil);
AudioSessionSetActive(true);
AudioSessionAddPropertyListener(
kAudioSessionProperty_AudioRouteChange,
applicationAudioRouteDidChange,
self);
Vấn đề bạn cần phải giải quyết là phương pháp 'applicationAudioRouteDidChange' cũng sẽ được gọi nếu ai đó chèn tai nghe. Bạn có thể kiểm tra điều này như đã nói ở AudioSessionProgrammingGuide:
Khi hệ thống gọi một callback tuyến đường thay đổi, nó cung cấp các thông tin bạn cần phải tìm ra những hành động để thực hiện. Căn callback của bạn trên nguyên mẫu AudioSessionPropertyListener từ âm thanh dịch vụ phiên, như ở đây:
trống MyPropertyListener (void * inClientData, AudioSessionPropertyID inID, UInt32 inDataSize, const void * inData);
Đối với sự kiện thay đổi tuyến đường, hệ thống gửi kAudioSessionProperty_AudioRouteChange trong tham số inID .
tham số
Các inData gửi đến callback của bạn có chứa một CFDictionaryRef đối tượng mô tả:
Tại sao con đường thay đổi gì con đường trước đây là
Tôi đã làm điều này và phải mất hình ảnh khi chuyển đổi im lặng là mmmm đã chuyển:
void applicationAudioRouteDidChange(void *inClientData,
AudioSessionPropertyID inID,
UInt32 inDataSize, const void *inData)
{
if ([[(NSDictionary*)inData objectForKey:@"OutputDeviceDidChange_Reason"] intValue] == 5) {
[((RootViewController*)inClientData).picker takePicture];
}
// Do something like reset the system
}
Như đã đề cập bởi Tom, chức năng bạn đang cố triển khai sẽ là một phần của iOS 5.
Nó chỉ được hỗ trợ nếu bạn đặt biến "showsCameraControl" của uiimagepickercontroller thành YES – Will