Microphone Permission হল একটি সিস্টেম অনুমতি যা একটি অ্যাপ্লিকেশনের ডিভাইসের মাইক্রোফোন অ্যাক্সেস করার জন্য প্রয়োজন। অডিও রেকর্ডিং, ভয়েস মেসেজ, ভিডিও কল এবং স্পিচ রিকগনিশনের জন্য এটি প্রয়োজন। Apple Developer Documentation, 2024 অনুযায়ী, সমস্ত অ্যাপ্লিকেশন যারা অডিও ক্যাপচার ব্যবহার করে তাদের সিস্টেম ডায়ালগের মাধ্যমে ব্যবহারকারীর স্পষ্ট সম্মতি নিতে বাধ্য।
মূল বিষয়
Microphone Permission হল একটি গোপনীয়তা সুরক্ষা প্রক্রিয়া যা ডিভাইসের মাইক্রোফোন থেকে অননুমোদিত অডিও রেকর্ডিং প্রতিরোধ করে। মোবাইল প্ল্যাটফর্মগুলি মাইক্রোফোনকে সবচেয়ে সংবেদনশীল সম্পদগুলির মধ্যে একটি হিসাবে বিবেচনা করে, কারণ অডিও রেকর্ডিং ব্যক্তিগত কথোপকথন, আশেপাশের পরিবেশ এবং গোপনীয় তথ্য ক্যাপচার করতে পারে।
Android RECORD_AUDIO-কে একটি বিপজ্জনক অনুমতি হিসাবে শ্রেণীবদ্ধ করে, এবং iOS-এ Info.plist-এ NSMicrophoneUsageDescription কী-এর বাধ্যতামূলক সংযোজন প্রয়োজন। উভয় প্ল্যাটফর্মে, অনুরোধটি রানটাইমে করা হয় এবং ব্যবহারকারী সিস্টেম সেটিংসের মাধ্যমে যেকোনো সময় অনুমতি প্রত্যাহার করতে পারে। সিস্টেম রেকর্ডিং নির্দেশক (iOS-এ কমলা বিন্দু, Android 12+-এ সবুজ নির্দেশক) ব্যবহারকারীকে সংকেত দেয় যে অ্যাপ্লিকেশনটি সেই মুহূর্তে মাইক্রোফোন ব্যবহার করছে।
Pew Research Center (2024)-এর একটি গবেষণা অনুযায়ী, 54% মোবাইল ডিভাইস ব্যবহারকারী কমপক্ষে একবার কোনো অ্যাপ্লিকেশনকে মাইক্রোফোন অ্যাক্সেস প্রত্যাখ্যান করেছেন। প্রধান কারণ হল অ্যাপের অডিও রেকর্ডিং কেন প্রয়োজন তা না বোঝা। তাই, ডেভেলপারকে মাইক্রোফোন ব্যবহারের উদ্দেশ্য যতটা সম্ভব স্বচ্ছভাবে ব্যাখ্যা করতে হবে।
Android-এ মাইক্রোফোন অনুমতি ম্যানিফেস্টে RECORD_AUDIO ঘোষণা করে এবং অ্যাপ্লিকেশন কোডে রানটাইম অনুরোধের মাধ্যমে অনুরোধ করা হয়। Android 10 থেকে শুরু করে, মাইক্রোফোন অ্যাক্সেস অতিরিক্তভাবে ব্যাকগ্রাউন্ড অ্যাপ্লিকেশনের জন্য সীমাবদ্ধতা দ্বারা নিয়ন্ত্রিত হয়।
প্রথম ধাপ হল ম্যানিফেস্ট ফাইলে RECORD_AUDIO অনুমতি ঘোষণা করা। এই ঘোষণা ছাড়া, রানটাইম অনুরোধের কোনো প্রভাব থাকবে না এবং অ্যাপ্লিকেশন মাইক্রোফোন অ্যাক্সেস করতে পারবে না।
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
CAPTURE_AUDIO_OUTPUT একটি সিস্টেম অনুমতি যা থার্ড-পার্টি অ্যাপ্লিকেশনের জন্য উপলব্ধ নয়। এটি শুধুমাত্র সিস্টেম অ্যাপ্লিকেশন দ্বারা অডিও আউটপুট ক্যাপচার করতে ব্যবহৃত হয়। সাধারণ অ্যাপ্লিকেশনগুলির শুধুমাত্র RECORD_AUDIO প্রয়োজন মাইক্রোফোন থেকে রেকর্ড করার জন্য।
ম্যানিফেস্টে ঘোষণার পরে, রানটাইম অনুরোধ করা প্রয়োজন। মাইক্রোফোন থেকে অডিও রেকর্ড করার জন্য AudioRecord ব্যবহার করে একটি উদাহরণ বিবেচনা করুন।
private val recordAudioPermission =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
if (granted) {
startRecording()
} else {
showMicrophoneExplanation()
}
}
fun startRecording() {
val sampleRate = 44100
val bufferSize = AudioRecord.getMinBufferSize(sampleRate,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT)
val recorder = AudioRecord(MediaRecorder.AudioSource.MIC,
sampleRate, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT, bufferSize)
recorder.startRecording()
// বাফারে অডিও ডেটা রেকর্ড করা হচ্ছে
}
অডিও রেকর্ডিং জীবনচক্র সঠিকভাবে পরিচালনা করা গুরুত্বপূর্ণ। যখন অ্যাপ্লিকেশন Android 9 এবং তার উপরে ব্যাকগ্রাউন্ডে যায়, তখন মাইক্রোফোন রেকর্ডিং সিস্টেম দ্বারা বিরাম দেওয়া হতে পারে। Android 10 থেকে শুরু করে, ব্যাকগ্রাউন্ড মাইক্রোফোন অ্যাক্সেস অতিরিক্তভাবে সীমাবদ্ধ: ব্যাকগ্রাউন্ডে একটি অ্যাপ রেকর্ডিং শুরু করতে পারে না এবং সক্রিয় রেকর্ডিং বিরাম দেওয়া হয়। ব্যাকগ্রাউন্ড রেকর্ডিংয়ের জন্য MediaProjection বা বিজ্ঞপ্তি সহ Service প্রয়োজন।
iOS-এ মাইক্রোফোন অনুমতি Info.plist-এ NSMicrophoneUsageDescription কী এবং AVAudioSession.requestRecordPermission পদ্ধতি কলের মাধ্যমে কনফিগার করা হয়। Apple-এর অনুরোধ ডায়ালগে মাইক্রোফোন ব্যবহারের কারণের বাধ্যতামূলক ব্যাখ্যা প্রয়োজন।
NSMicrophoneUsageDescription কী যেকোনো অ্যাপ্লিকেশনের জন্য বাধ্যতামূলক যা মাইক্রোফোন অ্যাক্সেসের অনুরোধ করে। এটি ছাড়া, অডিও রেকর্ড করার চেষ্টা করলে অ্যাপ্লিকেশন ক্র্যাশ হবে।
<key>NSMicrophoneUsageDescription</key>
<string>ভয়েস নোট রেকর্ড করতে এবং অডিও বার্তা পাঠাতে অ্যাপের মাইক্রোফোন অ্যাক্সেস প্রয়োজন।</string>
iOS-এ মাইক্রোফোন অ্যাক্সেসের অনুরোধ AVAudioSession-এর মাধ্যমে করা হয়। প্রতিক্রিয়া পাওয়ার পর, অ্যাপ্লিকেশন অডিও সেশন কনফিগার করে এবং রেকর্ডিং শুরু করে।
import AVFAudio
func requestMicrophoneAccess() {
AVAudioSession.sharedInstance().requestRecordPermission { granted in
DispatchQueue.main.async {
if granted {
self.configureAudioSession()
self.startAudioRecording()
} else {
self.redirectToSettings()
}
}
}
}
private func configureAudioSession() {
let session = AVAudioSession.sharedInstance()
do {
try session.setCategory(.playAndRecord, mode: .default)
try session.setActive(true)
} catch {
print("Audio session error: \(error)")
}
}
iOS 14 এবং তার উপরে, মাইক্রোফোন ব্যবহার করা অ্যাপ্লিকেশন স্ট্যাটাস বারে একটি কমলা নির্দেশক প্রদর্শন করে। ব্যবহারকারী দেখতে পারেন কোন অ্যাপ্লিকেশন বর্তমানে অডিও রেকর্ড করছে। যদি অ্যাপ্লিকেশন বৈধ কারণ ছাড়া ব্যাকগ্রাউন্ডে মাইক্রোফোন ব্যবহার করে, Apple আপডেট প্রত্যাখ্যান করতে পারে। AVAudioSession আপনাকে অডিও সেশনের ক্যাটাগরি এবং মোড কনফিগার করতে দেয়, যা ব্যাকগ্রাউন্ডে স্থানান্তরিত হলে অ্যাপ্লিকেশনের আচরণ নির্ধারণ করে।
মাইক্রোফোন ব্যবহারের পরিস্থিতি মোবাইল অ্যাপ্লিকেশনে বৈচিত্র্যময়: সাধারণ ভয়েস রেকর্ডিং থেকে রিয়েল-টাইমে জটিল অডিও স্ট্রিম প্রক্রিয়াকরণ পর্যন্ত।
মেসেঞ্জার এবং নোট নেওয়ার অ্যাপ ভয়েস বার্তা রেকর্ড করতে মাইক্রোফোন ব্যবহার করে। এই ক্ষেত্রে, রেকর্ড বাটন চাপলে Microphone Permission অনুরোধ করা হয়। রেকর্ডিং শেষ হওয়ার পর, অডিও সেশন বন্ধ করা গুরুত্বপূর্ণ যাতে অন্য অ্যাপ্লিকেশনগুলি মাইক্রোফোন ব্যবহার করতে পারে। iOS-এ AVAudioSession এবং Android-এ AudioManager অডিও ফোকাস পরিচালনা করে।
ভয়েস ইনপুট সহ অ্যাপ্লিকেশন (অনুসন্ধান, ডিক্টেশন, ভয়েস সহায়ক) স্পিচ রিকগনিশন API-এর সাথে মাইক্রোফোন ব্যবহার করে। Android-এ, এটি android.speech থেকে SpeechRecognizer, iOS-এ — Speech ফ্রেমওয়ার্ক থেকে SFSpeechRecognizer। স্পিচ রিকগনিশনের জন্য রিকগনিশন সার্ভিসের (Android-এ SPEECH, iOS-এ SFSpeechRecognizer.requestAuthorization) জন্য অতিরিক্ত অনুমতির প্রয়োজন হতে পারে।
ভিডিও কলিং অ্যাপ্লিকেশন (WebRTC, Zoom, Telegram) Camera Permission-এর সাথে Microphone Permission-এর অনুরোধ করে। এই প্রসঙ্গে, উভয় অনুমতি একসাথে না করে ক্রমিকভাবে অনুরোধ করা গুরুত্বপূর্ণ, যাতে ব্যবহারকারী ডায়ালগ দ্বারা অভিভূত না হন। WebRTC অডিও এবং ভিডিও ক্যাপচারের জন্য getUserMedia ব্যবহার করে, কিন্তু মোবাইল প্ল্যাটফর্মে প্রথমে সিস্টেম অনুমতি প্রয়োজন।
গুণগত রেকর্ডিংয়ের জন্য, অডিও সেশন প্যারামিটার সঠিকভাবে কনফিগার করা প্রয়োজন। iOS-এ, .playAndRecord ক্যাটাগরি একসাথে শব্দ চালানো এবং রেকর্ড করার অনুমতি দেয়। Android-এ, AudioSource.MIC নির্বাচন প্রধান মাইক্রোফোন থেকে ক্যাপচার প্রদান করে, যখন AudioSource.VOICE_COMMUNICATION ভয়েস যোগাযোগের জন্য রেকর্ডিং অপ্টিমাইজ করে। অতিরিক্তভাবে, স্ট্যান্ডার্ড CD মানের জন্য 44100 Hz নমুনা হার এবং PCM 16 বিট ফরম্যাট সেট করা যেতে পারে।
অডিও রেকর্ডিংয়ের সময় সিস্টেম ব্যাঘাত ঘটতে পারে: ইনকামিং কল, অ্যালার্ম সক্রিয়করণ, অন্য অ্যাপ্লিকেশন থেকে বিজ্ঞপ্তি। iOS-এ, AVAudioSessionDelegate beginInterruption এবং endInterruption পরিচালনা করে। Android-এ, AudioManager.OnAudioFocusChangeListener অ্যাপ্লিকেশনকে অডিও ফোকাস হারানো বা ফিরে আসার বিষয়ে জানায়। সঠিক ব্যাঘাত পরিচালনা অপ্রত্যাশিত ঘটনার সময় রেকর্ডিং সংরক্ষণ এবং ডেটা ক্ষতি এড়াতে দেয়। ফোকাস হারালে রেকর্ডিং বিরাম দেওয়া এবং ব্যবহারকারীকে জানিয়ে ফিরে আসার পরে পুনরায় শুরু করার পরামর্শ দেওয়া হয়।
অডিও ক্যাপচার অপ্টিমাইজেশন নমুনা হার, বাফার আকার এবং এনকোডিং ফরম্যাটের কনফিগারেশন অন্তর্ভুক্ত করে। ভয়েস বার্তার জন্য, 44100 Hz ফ্রিকোয়েন্সি এবং মোনো চ্যানেল যথেষ্ট। স্পিচ রিকগনিশনের জন্য, 16000 Hz ফ্রিকোয়েন্সি প্রয়োজন হতে পারে।
iOS-এ, রেকর্ডিং লেটেন্সি কনফিগার করতে AVAudioSession.setPreferredIOBufferDuration ব্যবহার করুন। ছোট বাফার লেটেন্সি কমায় কিন্তু CPU লোড বাড়ায়। Android-এ, AudioRecord.getMinBufferSize প্রদত্ত প্যারামিটারের জন্য ন্যূনতম বাফার আকার ফেরত দেয়। উচ্চ সিস্টেম লোডের অধীনে রেকর্ডিং করার সময় ডেটা ক্ষতি রোধ করতে এই ন্যূনতমের চেয়ে কম নয় এমন বাফার ব্যবহার করার পরামর্শ দেওয়া হয়।
সেরা অভ্যাস Microphone Permission-এর জন্য ব্যবহারকারীর বিশ্বাস বাড়ানো এবং প্ল্যাটফর্মের প্রয়োজনীয়তা মেনে চলার লক্ষ্যে।
Microphone Permission অনুরোধ করার আগে, একটি স্ক্রিন দেখান যা ব্যাখ্যা করে কেন অ্যাপের মাইক্রোফোন প্রয়োজন এবং রেকর্ডিং কীভাবে ব্যবহার করা হবে। নির্দেশ করুন অডিও সার্ভারে প্রেরিত হয় নাকি স্থানীয়ভাবে প্রক্রিয়াজাত হয়। ব্যবহারকারীরা উল্লেখযোগ্যভাবে বেশি অ্যাক্সেস দেন যদি তারা বুঝতে পারেন যে রেকর্ডিং ডিভাইস ছেড়ে যায় না। স্থানীয় প্রক্রিয়াকরণ (অন-ডিভাইস ASR) বিশ্বাসের জন্য একটি শক্তিশালী যুক্তি।
যদি অ্যাপ্লিকেশনের ব্যাকগ্রাউন্ড অডিও রেকর্ডিংয়ের প্রয়োজন না হয়, তাহলে ব্যাকগ্রাউন্ডে যাওয়ার সময় মাইক্রোফোন বন্ধ করতে ভুলবেন না। এটি কেবল ব্যাটারি সাশ্রয় করে না বরং রেকর্ডিং নির্দেশক দেখে ব্যবহারকারীর নেতিবাচক প্রতিক্রিয়াও প্রতিরোধ করে। iOS-এ, রেকর্ডিং বিরাম দিতে UIApplicationDelegate পদ্ধতি applicationDidEnterBackground ব্যবহার করুন। Android-এ, Activity বা Service-এ onPause এবং onStop পরিচালনা করুন।
অডিও ক্যাপচারের সময় নিজস্ব রেকর্ডিং নির্দেশক (অ্যানিমেটেড মাইক্রোফোন আইকন বা তরঙ্গ) দেখান। এটি ব্যবহারকারীকে জানায় যে মাইক্রোফোন সক্রিয় এবং নেতিবাচক প্রতিক্রিয়ার ঝুঁকি হ্রাস করে। Apple এবং Google সর্বাধিক স্বচ্ছতার জন্য সিস্টেম নির্দেশক নিজস্ব UI উপাদান দিয়ে নকল করার পরামর্শ দেয়।
সচরাচর জিজ্ঞাসা
না, মাইক্রোফোন অনুমতি শুধুমাত্র মাইক্রোফোন থেকে অডিও ক্যাপচার-এর জন্য প্রয়োজন। স্পিকার বা হেডফোনের মাধ্যমে শব্দ চালানোর জন্য Microphone Permission প্রয়োজন হয় না। প্লেব্যাকের জন্য, iOS-এ অডিও সেশন বা Android-এ AudioTrack কনফিগার করা যথেষ্ট।
ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO) ব্যবহার করুন। পদ্ধতিটি PackageManager.PERMISSION_GRANTED বা PERMISSION_DENIED ফেরত দেয়। অতিরিক্তভাবে, PackageManager.hasSystemFeature-এর মাধ্যমে ডিভাইসে মাইক্রোফোন উপলব্ধ কিনা পরীক্ষা করুন।
একটি বিকল্প পরিস্থিতি অফার করুন: ভয়েসের পরিবর্তে টেক্সট ইনপুট, অডিও ছাড়া বার্তা পাঠানো, শব্দ ছাড়া ভিডিও দেখা। যদি ভয়েস ইনপুট বৈশিষ্ট্য গুরুত্বপূর্ণ হয়, তাহলে সিস্টেম সেটিংস-এ অনুমতি সক্রিয় করার নির্দেশনা এবং সেখানে নেভিগেট করার বাটন সহ একটি স্ক্রিন দেখান।
Android 12 থেকে শুরু করে, ব্যাকগ্রাউন্ডে কোনো অ্যাপ্লিকেশন মাইক্রোফোন অ্যাক্সেস করতে পারে না। ব্যাকগ্রাউন্ডে যাওয়ার সময় সক্রিয় রেকর্ডিং বিরাম দেওয়া হয়। অতিরিক্তভাবে, Privacy Chip নির্দেশক এসেছে — স্ট্যাটাস বারে একটি সবুজ আইকন যা দেখায় যে কোনো অ্যাপ্লিকেশন মাইক্রোফোন ব্যবহার করছে।
সবচেয়ে সাধারণ কারণ: NSMicrophoneUsageDescription কী-এর অনুপস্থিতি, অ-নির্দিষ্ট কারণ বিবরণ (“সেবা উন্নত করতে”-এর পরিবর্তে “ভয়েস বার্তা রেকর্ড করতে”), স্পষ্ট ব্যবহারকারী কর্ম ছাড়া অনুমতি অনুরোধ, বা ন্যায্য কার্যকারিতা ছাড়া ব্যাকগ্রাউন্ডে মাইক্রোফোন ব্যবহার।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন