একটি অ্যাপ অন্য কোনো অ্যাপ থেকে প্লে হওয়া ভিডিও বা অডিও রেকর্ড করতে পারে। এই ধরনের অ্যাপগুলোকে অবশ্যই MediaProjection টোকেনটি সঠিকভাবে পরিচালনা করতে হবে। এই পৃষ্ঠায় তা ব্যাখ্যা করা হয়েছে। এখানে আরও দেখানো হয়েছে, কীভাবে একজন ডিভাইস অ্যাডমিন যেকোনো স্ক্রিন স্ন্যাপশট রেকর্ড করার ক্ষমতা নিষ্ক্রিয় করতে পারেন এবং কীভাবে একটি অডিও অ্যাপ তার প্লে করা কন্টেন্ট রেকর্ড করা থেকে অন্য অ্যাপগুলোকে আটকাতে পারে।
MediaProjection টোকেন কীভাবে পরিচালনা করবেন
MediaProjection এপিআই অ্যাপগুলোকে একটি MediaProjection টোকেন অর্জন করার সুযোগ দেয়, যা তাদের একবারের জন্য স্ক্রিনের বিষয়বস্তু বা অডিও ক্যাপচার করার অ্যাক্সেস দেয়। আপনার অ্যাপকে টোকেনটি দেওয়ার আগে অ্যান্ড্রয়েড অপারেটিং সিস্টেম ব্যবহারকারীর অনুমতি চায়।
অপারেটিং সিস্টেম কুইক সেটিংস UI-তে সক্রিয় MediaProjection টোকেনগুলো প্রদর্শন করে এবং ব্যবহারকারীদের যেকোনো সময় একটি টোকেনের অ্যাক্সেস প্রত্যাহার করার সুযোগ দেয়। যখন এটি ঘটে, তখন সেশনের সাথে যুক্ত ভার্চুয়াল ডিসপ্লে বা অডিও স্ট্রিমগুলো মিডিয়া স্ট্রিম গ্রহণ করা বন্ধ করে দেয়। আপনার অ্যাপকে অবশ্যই যথাযথভাবে সাড়া দিতে হবে, অন্যথায় এটি অডিও নীরবতা বা একটি কালো ভিডিও স্ট্রিম রেকর্ড করতে থাকবে।
টোকেন হারিয়ে গেলে তা সামাল দিতে, registerCallback মেথড ব্যবহার করে MediaProjection ইনস্ট্যান্সে একটি কলব্যাক রেজিস্টার করুন, এবং onStop মেথডটি কল করা হলে রেকর্ডিং বন্ধ করুন।
আরও তথ্যের জন্য, মিডিয়া প্রজেকশন দেখুন।
ভিডিও ধারণ করুন
মিডিয়া প্রজেকশন এপিআই ব্যবহার করে কীভাবে রিয়েল টাইমে কোনো ডিভাইসের স্ক্রিন ক্যাপচার করে তা সারফেসভিউতে দেখানো যায়, তা শিখতে স্ক্রিনক্যাপচার স্যাম্পল অ্যাপটি দেখুন।
আপনি স্ক্রিন রেকর্ডিং বন্ধ করতে DevicePolicyManager ব্যবহার করতে পারেন। এন্টারপ্রাইজ অ্যাকাউন্টগুলোর (Android for Work) ক্ষেত্রে, অ্যাডমিনিস্ট্রেটর setScreenCaptureDisabled মেথডটি ব্যবহার করে ওয়ার্ক প্রোফাইলের জন্য অ্যাসিস্ট্যান্ট ডেটা সংগ্রহ নিষ্ক্রিয় করতে পারেন।
“অ্যাপ ছাড়া অ্যান্ড্রয়েড ডিভাইস পরিচালনা” নামক কোডল্যাবটিতে দেখানো হয়েছে কীভাবে স্ক্রিনশট নেওয়া নিষিদ্ধ করতে হয়।
অডিও প্লেব্যাক ক্যাপচার করুন
Android 10-এ AudioPlaybackCapture API চালু করা হয়েছিল। এই API অ্যাপগুলোকে অন্য অ্যাপে বাজানো অডিও কপি করার ক্ষমতা দেয়। এই ফিচারটি স্ক্রিন ক্যাপচারের অনুরূপ, তবে এটি অডিওর জন্য। এর প্রধান ব্যবহার হলো স্ট্রিমিং অ্যাপগুলোর জন্য, যারা গেম থেকে বাজানো অডিও ক্যাপচার করতে চায়।
উল্লেখ্য যে, 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 |
|---|---|---|---|
| সত্য | যেকোনো অ্যাপ | শুধুমাত্র সিস্টেম | কোন ক্যাপচার নেই |
| মিথ্যা | শুধুমাত্র সিস্টেম | শুধুমাত্র সিস্টেম | কোন ক্যাপচার নেই |