2010-11-21 29 views
5

Tôi đang phát triển ứng dụng máy ảnh để chụp ảnh khi nhấn nút âm lượng.Audio Session List Listener tự động tắt trong UIImagePickerController?

Tôi đã sử dụng AudioSessionAddPropertyListener(kAudioSessionProperty_CurrentHardwareOutputVolume, audioVolumeChangeListenerCallback, self); để nhận thông báo thành công khi nhấn nút âm lượng trước khi máy ảnh của tôi bắt đầu. Tuy nhiên, sau khi tôi bắt đầu máy ảnh, người nghe thuộc tính này không còn hoạt động nữa. Nó tự động bị hủy kích hoạt hay gì đó?

Tôi đã cố gắng triển khai UIImagePickerController tùy chỉnh để bao gồm Trình nghe thuộc tính phiên âm thanh bên trong ImagePickerController nhưng không có hy vọng. Biết ơn nếu có ai có thể chia sẻ quan điểm của bạn. Cảm ơn.

Trả lời

3

Tôi rất tiếc khi nói rằng đây là thứ không được hỗ trợ trong IOS4. Nếu bạn quản lý để thực hiện thành công ứng dụng này sẽ bị từ chối bởi táo.

Tuy nhiên đã được công bố tại WWDC 2011 rằng điều này được hỗ trợ đầy đủ trong IO5 và sẽ là hành vi mặc định khi sử dụng UIImagePickerController trong bất kỳ ứng dụng nào.

Hy vọng điều này sẽ hữu ích.

+0

Nó chỉ được hỗ trợ nếu bạn đặt biến "showsCameraControl" của uiimagepickercontroller thành YES – Will

1

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.

Các vấn đề liên quan