একটি অ্যাপ অন্য অ্যাপ থেকে চালানো ভিডিও বা অডিও রেকর্ড করতে পারে। এই ধরনের অ্যাপগুলিকে অবশ্যই MediaProjection
টোকেন সঠিকভাবে পরিচালনা করতে হবে। এই পৃষ্ঠাটি ব্যাখ্যা করে কিভাবে. এটি আরও দেখায় যে কীভাবে একজন ডিভাইস প্রশাসক যেকোনো স্ক্রিন স্ন্যাপশট রেকর্ড করার ক্ষমতা অক্ষম করতে পারে এবং কীভাবে একটি অডিও অ্যাপ অন্যান্য অ্যাপকে এটি চালানো বিষয়বস্তু রেকর্ড করা থেকে আটকাতে পারে।
কিভাবে একটি MediaProjection
টোকেন পরিচালনা করবেন
MediaProjection
API অ্যাপগুলিকে একটি MediaProjection
টোকেন অর্জন করার অনুমতি দেয় যা তাদের স্ক্রীন বিষয়বস্তু বা অডিও ক্যাপচার করতে এক সময় অ্যাক্সেস দেয়। অ্যান্ড্রয়েড ওএস আপনার অ্যাপে টোকেন দেওয়ার আগে ব্যবহারকারীকে তাদের অনুমতি চায়।
OS দ্রুত সেটিংস UI-তে সক্রিয় MediaProjection
টোকেনগুলি প্রদর্শন করে এবং ব্যবহারকারীদের যে কোনো সময় একটি টোকেনের অ্যাক্সেস প্রত্যাহার করতে দেয়। যখন এটি ঘটে তখন সেশনের সাথে যুক্ত ভার্চুয়াল ডিসপ্লে বা অডিও স্ট্রীমগুলি মিডিয়া স্ট্রিমগুলি গ্রহণ করা বন্ধ করে দেয়। আপনার অ্যাপটিকে অবশ্যই যথাযথভাবে প্রতিক্রিয়া জানাতে হবে, অন্যথায় এটি অডিও নীরবতা বা একটি কালো ভিডিও স্ট্রিম রেকর্ড করতে থাকবে।
একটি টোকেন হারানোর জন্য, registerCallback
পদ্ধতি ব্যবহার করে MediaProjection
ইনস্ট্যান্সে একটি কলব্যাক নিবন্ধন করুন এবং onStop
পদ্ধতিতে কল করা হলে রেকর্ডিং বন্ধ করুন।
আরও তথ্যের জন্য, মিডিয়া প্রজেকশন দেখুন।
ভিডিও ক্যাপচার করুন
রিয়েল টাইমে ডিভাইসের স্ক্রীন ক্যাপচার করতে এবং এটিকে সারফেসভিউতে দেখানোর জন্য মিডিয়া প্রজেকশন এপিআই কীভাবে ব্যবহার করবেন তা শিখতে স্ক্রিনক্যাপচার নমুনা অ্যাপটি দেখুন।
আপনি স্ক্রীন রেকর্ডিং প্রতিরোধ করতে DevicePolicyManager
ব্যবহার করতে পারেন। এন্টারপ্রাইজ অ্যাকাউন্টের জন্য (Android for Work), প্রশাসক setScreenCaptureDisabled পদ্ধতি ব্যবহার করে কাজের প্রোফাইলের জন্য সহকারী ডেটা সংগ্রহ অক্ষম করতে পারেন।
কোন অ্যাপ ছাড়াই অ্যান্ড্রয়েড ডিভাইস ম্যানেজ করা কোডল্যাব দেখায় কিভাবে স্ক্রিনশট নিষিদ্ধ করা যায়।
অডিও প্লেব্যাক ক্যাপচার
অডিওপ্লেব্যাকক্যাপচার এপিআইটি অ্যান্ড্রয়েড 10-এ চালু করা হয়েছিল। এই এপিআই অ্যাপগুলিকে অন্য অ্যাপের দ্বারা চালানো অডিও কপি করার ক্ষমতা দেয়। এই বৈশিষ্ট্যটি স্ক্রিন ক্যাপচারের অ্যানালগ, তবে অডিওর জন্য। প্রাথমিক ব্যবহারের ক্ষেত্রে হল স্ট্রিমিং অ্যাপগুলির জন্য যেগুলি গেমগুলির দ্বারা বাজানো অডিও ক্যাপচার করতে চায়৷
মনে রাখবেন যে AudioPlaybackCapture API যে অ্যাপের অডিও ক্যাপচার করা হচ্ছে তার লেটেন্সিকে প্রভাবিত করে না।
একটি ক্যাপচার অ্যাপ তৈরি করা হচ্ছে
নিরাপত্তা এবং গোপনীয়তার জন্য, প্লেব্যাক ক্যাপচার কিছু সীমাবদ্ধতা আরোপ করে। অডিও ক্যাপচার করতে সক্ষম হতে, একটি অ্যাপকে অবশ্যই এই প্রয়োজনীয়তাগুলি পূরণ করতে হবে:
- অ্যাপটির অবশ্যই
RECORD_AUDIO
অনুমতি থাকতে হবে। - অ্যাপটিকে
MediaProjectionManager.createScreenCaptureIntent()
দ্বারা প্রদর্শিত প্রম্পট আনতে হবে এবং ব্যবহারকারীকে অবশ্যই এটি অনুমোদন করতে হবে। - ক্যাপচারিং এবং প্লে অ্যাপ্লিকেশানগুলি অবশ্যই একই ব্যবহারকারীর প্রোফাইলে থাকতে হবে।
অন্য অ্যাপ থেকে অডিও ক্যাপচার করতে, আপনার অ্যাপকে অবশ্যই একটি AudioRecord
অবজেক্ট তৈরি করতে হবে এবং এতে একটি AudioPlaybackCaptureConfiguration
যোগ করতে হবে। এই পদক্ষেপগুলি অনুসরণ করুন:
- একটি
AudioPlaybackCaptureConfiguration
তৈরি করতেAudioPlaybackCaptureConfiguration.Builder.build()
এ কল করুন। -
setAudioPlaybackCaptureConfig
কল করেAudioRecord
কনফিগারেশনটি পাস করুন।
অডিও ক্যাপচার নিয়ন্ত্রণ
আপনার অ্যাপ কী ধরনের সামগ্রী রেকর্ড করতে পারে এবং অন্য কী ধরনের অ্যাপ তার নিজস্ব প্লেব্যাক রেকর্ড করতে পারে তা নিয়ন্ত্রণ করতে পারে।
অডিও বিষয়বস্তু দ্বারা সীমাবদ্ধ ক্যাপচার
একটি অ্যাপ এই পদ্ধতিগুলি ব্যবহার করে কোন অডিও ক্যাপচার করতে পারে তা সীমিত করতে পারে:
- একটি নির্দিষ্ট ব্যবহার ক্যাপচার করার অনুমতি দিতে AudioPlaybackCaptureConfiguration.addMatchingUsage() এ একটি
AUDIO_USAGE
পাস করুন। একাধিক ব্যবহার নির্দিষ্ট করতে পদ্ধতিটিকে একাধিকবার কল করুন। - AudioPlaybackCaptureConfiguration.excludeUsage() তে একটি
AUDIO_USAGE
পাস করুন যাতে সেই ব্যবহারটি ক্যাপচার করা নিষিদ্ধ করা যায়৷ একাধিক ব্যবহার নির্দিষ্ট করতে পদ্ধতিটিকে একাধিকবার কল করুন। - শুধুমাত্র একটি নির্দিষ্ট UID দিয়ে অ্যাপ ক্যাপচার করতে AudioPlaybackCaptureConfiguration.addMatchingUid() এ একটি UID পাস করুন। একাধিক UID উল্লেখ করতে পদ্ধতিটিকে একাধিকবার কল করুন।
- সেই UID ক্যাপচার করা নিষিদ্ধ করতে AudioPlaybackCaptureConfiguration.excludeUid() -এ একটি UID পাস করুন। একাধিক UID উল্লেখ করতে পদ্ধতিটিকে একাধিকবার কল করুন।
মনে রাখবেন আপনি addMatchingUsage()
এবং excludeUsage()
পদ্ধতি একসাথে ব্যবহার করতে পারবেন না। আপনি একটি বা অন্য চয়ন করতে হবে. একইভাবে, আপনি একই সময়ে addMatchingUid()
এবং excludeUid()
ব্যবহার করতে পারবেন না।
অন্যান্য অ্যাপ্লিকেশন দ্বারা সীমাবদ্ধ ক্যাপচার
অন্য অ্যাপের অডিও ক্যাপচার করা থেকে বিরত রাখতে আপনি একটি অ্যাপ কনফিগার করতে পারেন। একটি অ্যাপ থেকে আসা অডিও শুধুমাত্র তখনই ক্যাপচার করা যাবে যদি অ্যাপটি এই প্রয়োজনীয়তাগুলি পূরণ করে:
ব্যবহার
যে প্লেয়ারটি অডিও তৈরি করছে তাকে অবশ্যই তার ব্যবহার USAGE_MEDIA
, USAGE_GAME
, বা USAGE_UNKNOWN
এ সেট করতে হবে৷
ক্যাপচার নীতি
প্লেয়ারের ক্যাপচার নীতি অবশ্যই AudioAttributes.ALLOW_CAPTURE_BY_ALL
হতে হবে, যা অন্য অ্যাপগুলিকে প্লেব্যাক ক্যাপচার করতে দেয়৷ এটি বিভিন্ন উপায়ে করা যেতে পারে:
- সমস্ত প্লেয়ারে ক্যাপচার সক্ষম করতে, অ্যাপের
manifest.xml
ফাইলেandroid:allowAudioPlaybackCapture="true"
অন্তর্ভুক্ত করুন। - এছাড়াও আপনি
AudioManager.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
কল করে সমস্ত প্লেয়ারে ক্যাপচার সক্ষম করতে পারেন। - আপনি
AudioAttributes.Builder.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
ব্যবহার করে এটি তৈরি করার সময় আপনি একটি পৃথক প্লেয়ারের উপর নীতি সেট করতে পারেন। (আপনি যদিAAudio
ব্যবহার করেন তাহলেAAudioStreamBuilder_setAllowedCapturePolicy(AAUDIO_ALLOW_CAPTURE_BY_ALL)
কল করুন।)
এই পূর্বশর্তগুলি পূরণ করা হলে, প্লেয়ার দ্বারা উত্পাদিত যেকোন অডিও ক্যাপচার করা যেতে পারে।
সিস্টেম ক্যাপচার অক্ষম করা হচ্ছে
উপরে বর্ণিত ক্যাপচারের অনুমতি প্রদানকারী সুরক্ষাগুলি শুধুমাত্র অ্যাপগুলিতে প্রযোজ্য। অ্যান্ড্রয়েড সিস্টেম উপাদানগুলি ডিফল্টরূপে প্লেব্যাক ক্যাপচার করতে পারে৷ এই উপাদানগুলির মধ্যে অনেকগুলি অ্যান্ড্রয়েড বিক্রেতাদের দ্বারা কাস্টমাইজ করা হয়েছে এবং অ্যাক্সেসিবিলিটি এবং ক্যাপশনিংয়ের মতো বৈশিষ্ট্যগুলি সমর্থন করে৷ এই কারণে এটি সুপারিশ করা হয় যে অ্যাপগুলি সিস্টেমকে তাদের প্লেব্যাক ক্যাপচার করার অনুমতি দেয়৷ বিরল ক্ষেত্রে যখন আপনি চান না যে সিস্টেম আপনার অ্যাপের প্লেব্যাক ক্যাপচার করুক, ক্যাপচার নীতিটি ALLOW_CAPTURE_BY_NONE
এ সেট করুন।
রানটাইমে নীতি সেট করা
একটি অ্যাপ চলাকালীন ক্যাপচার নীতি পরিবর্তন করতে আপনি AudioManager.setAllowedCapturePolicy()
এ কল করতে পারেন। আপনি পদ্ধতিতে কল করার সময় যদি একটি MediaPlayer বা AudioTrack বাজতে থাকে, তাহলে অডিও প্রভাবিত হয় না। নীতি পরিবর্তন কার্যকর হওয়ার জন্য আপনাকে অবশ্যই প্লেয়ারটি বন্ধ করে পুনরায় খুলতে হবে বা ট্র্যাক করতে হবে।
নীতি = ম্যানিফেস্ট + অডিও ম্যানেজার + অডিও অ্যাট্রিবিউট
যেহেতু ক্যাপচার নীতিটি বেশ কয়েকটি জায়গায় নির্দিষ্ট করা যেতে পারে, তাই কার্যকর নীতিটি কীভাবে নির্ধারণ করা হয় তা বোঝা গুরুত্বপূর্ণ। সবচেয়ে সীমাবদ্ধ ক্যাপচার নীতি সর্বদা প্রয়োগ করা হয়। উদাহরণ স্বরূপ, একটি অ্যাপ যার ম্যানিফেস্টে setAllowedCapturePolicy="false"
অন্তর্ভুক্ত থাকে সেটি কখনই নন-সিস্টেম অ্যাপগুলিকে তার অডিও ক্যাপচার করার অনুমতি দেবে না, এমনকি যদি AudioManager#setAllowedCapturePolicy
ALLOW_CAPTURE_BY_ALL
এ সেট করা থাকে। একইভাবে, যদি AudioManager#setAllowedCapturePolicy
ALLOW_CAPTURE_BY_ALL
তে সেট করা থাকে এবং ম্যানিফেস্ট সেট setAllowedCapturePolicy="true"
, তবে মিডিয়া প্লেয়ারের AudioAttributes
দিয়ে তৈরি করা হয়েছিল AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)
, তাহলে এই মিডিয়া প্লেয়ারটি নন-সিস্টেম অ্যাপ দ্বারা ক্যাপচার করা যাবে না।
নীচের সারণীটি ম্যানিফেস্ট অ্যাট্রিবিউটের প্রভাব এবং কার্যকর নীতির সংক্ষিপ্ত বিবরণ দেয়:
অনুমতি অডিওপ্লেব্যাক ক্যাপচার | ALLOW_CAPTURE_BY_ALL | ALLOW_CAPTURE_BY_SYSTEM | ALLOW_CAPTURE_BY_NONE |
---|---|---|---|
সত্য | যেকোনো অ্যাপ | শুধুমাত্র সিস্টেম | কোন ক্যাপচার |
মিথ্যা | শুধুমাত্র সিস্টেম | শুধুমাত্র সিস্টেম | কোন ক্যাপচার |