2015-10-11 12 views
6

Vì vậy, điều là tôi cần phải gọi một số chức năng sau khi người dùng cho (hoặc từ chối) một sự cho phép để sử dụng micro.Cách phát hiện quyền sử dụng micrô của người dùng trên iOS?

Tôi đã thấy điều này:

[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) { 
     if (granted) { 
      // Microphone enabled code 
      [self someFunction]; 

     } 
     else { 
      // Microphone disabled code 
     } 
}]; 

Tuy nhiên, điều này chỉ có tác dụng để phát hiện tình trạng hiện thời.

Nếu trạng thái hiện tại là "không" và hiển thị bật lên và người dùng cấp quyền - chức năng sẽ không được gọi. Đó là bởi vì trong thời điểm thực thi quyền này là "không" và cho đến khi chúng tôi chạy mã lần sau, hàm sẽ không được gọi.

Điều tôi muốn làm là gọi một hàm sau khi người dùng nhấn "cho phép" hoặc "từ chối".

Bất kỳ ai biết cách thực hiện việc này?

EDIT: Quên đề cập đến nó phải là giải pháp tương thích iOS 7.0.

+1

Tôi không nghĩ rằng bạn có thể phát hiện sự lựa chọn của các điều khoản kỷ lục tự động, tuy nhiên, bạn có thể tạo một bộ đếm thời gian để kiểm tra nếu ứng dụng có quyền truy cập mỗi 1 thứ hai hoặc lâu hơn, và nếu có, bộ đếm thời gian sẽ dừng và ứng dụng sẽ hoạt động như mong đợi. – vaid

+0

cũng đúng – veich

Trả lời

11

Phương thức AVAudioSession được giới thiệu trong iOS 8 là recordPermission. Điều này trả về một enum có tên là AVAudioSessionRecordPermission. Bạn có thể sử dụng một công tắc để xác định liệu thông báo cho phép đã được trình bày cho người dùng hay không. Bằng cách này, bạn chỉ gọi requestRecordPermission khi nó chưa được trình bày cho người dùng, vì vậy khối quyền hạn có thể cho rằng nó đang được thực hiện sau khi người dùng cho phép hoặc không cho phép lần đầu tiên.

Một ví dụ sẽ là một cái gì đó giống như -

AVAudioSessionRecordPermission permissionStatus = [[AVAudioSession sharedInstance] recordPermission]; 

switch (permissionStatus) { 
    case AVAudioSessionRecordPermissionUndetermined:{ 
      [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) { 
      // CALL YOUR METHOD HERE - as this assumes being called only once from user interacting with permission alert! 
       if (granted) { 
        // Microphone enabled code 
       } 
       else { 
        // Microphone disabled code 
       } 
      }]; 
      break; 
      } 
    case AVAudioSessionRecordPermissionDenied: 
      // direct to settings... 
      break; 
    case AVAudioSessionRecordPermissionGranted: 
      // mic access ok... 
      break; 
    default: 
      // this should not happen.. maybe throw an exception. 
      break; 
} 
+0

Điều này có vẻ như tôi trả lời tốt nhưng tôi quên đề cập đến rằng tôi cần giải pháp tương thích iOS 7.0 lên. Tôi sẽ bỏ phiếu cho giải pháp cho nỗ lực này. – veich

+1

Tôi thấy ... vì cảnh báo quyền chỉ được trình bày cho người dùng một lần, có thể xem xét viết một số loại cờ cho NSUserDefaults sau khi bạn gọi requestRecordPermission. Nhưng kiểm tra cờ trước khi gọi và nếu nó không có mặt thì bạn sẽ biết nó được gọi lần đầu tiên và bạn có thể tạo một giả định tương tự trong khối quyền như câu trả lời của tôi. – Bamsworld

0

Nếu sử dụng vẫn chưa được sự cho phép của bạn, làm như sau:

  1. Đầu tiên, cho thấy cuộc đối thoại bật lên
  2. Chạy mã của bạn trong OP

-

if([[AVAudioSession sharedInstance] respondsToSelector:@selector(requestRecordPermission)]) { 
    [[AVAudioSession sharedInstance] requestRecordPermission]; 
    // Now run your function 
} 
+1

Tôi nghĩ OP có nghĩa là anh/cô ấy muốn nắm bắt yêu cầu ghi tự động mà iOS bật lên cho bạn khi bạn đang cố truy cập micrô. – vaid

+0

Tôi không biết OP là gì và cũng không nên thực thi mã này từ đâu. Cố gắng thêm nó và mã thực hiện ngay lập tức để không có cách nào để nắm bắt phản hồi của người dùng – veich

+1

OP có nghĩa là "áp phích gốc". Mã có thể được chèn vào bên trong một phương thức. Khi phương thức được gọi là mã này được thực hiện. – vaid

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