কার্যকলাপ লঞ্চ নীতি

অ্যাক্টিভিটি চালুর আচরণ অ্যাপের AndroidManifest.xml ফাইলের লঞ্চ মোড, ইন্টেন্ট ফ্ল্যাগ এবং কলার কর্তৃক প্রদত্ত ActivityOptions দ্বারা নির্ধারিত হয়। অ্যাক্টিভিটি চালুর জন্য একটি নির্দিষ্ট ডিসপ্লে নির্ধারণ করতে ActivityOption#setLaunchDisplayId(int) ব্যবহার করুন।

  • ডিফল্টরূপে, অ্যাক্টিভিটিটি কলারের ডিসপ্লেতেই চালু হয়। উদাহরণস্বরূপ, লঞ্চার থেকে শুরু করা একটি অ্যাক্টিভিটির নতুন ইনস্ট্যান্স কোনো অতিরিক্ত ফ্ল্যাগ বা অপশন ছাড়াই একই ডিসপ্লেতে স্থাপন করা উচিত। লঞ্চ করার জন্য সঠিক কনটেক্সট (অ্যাক্টিভিটি বনাম অ্যাপ্লিকেশন) ব্যবহার করতে ভুলবেন না।
  • যদি কোনো নির্দিষ্ট ডিসপ্লের সাথে যুক্ত নয় এমন কোনো উৎস থেকে (যেমন শেল বা অ্যাপ্লিকেশন কনটেক্সট থেকে) অ্যাক্টিভিটিটি চালু করা হয়, তাহলে সেটি সেই শীর্ষ ডিসপ্লেতে স্থাপন করা হয় যেখানে ব্যবহারকারী সর্বশেষ ডিভাইসটির সাথে ইন্টারঅ্যাক্ট করেছিলেন অথবা যেখান থেকে সর্বশেষ অ্যাক্টিভিটিটি চালু করা হয়েছিল।
  • একটি অ্যাক্টিভিটি চালু করার অভিপ্রায় সিস্টেমে বিদ্যমান কোনো অ্যাক্টিভিটি ইনস্ট্যান্সে রূপান্তরিত হতে পারে। সেক্ষেত্রে, যদি কোনো অতিরিক্ত ফ্ল্যাগ প্রদান করা না হয়, তাহলে অ্যাক্টিভিটিটি সেই একই ডিসপ্লেতে প্রদর্শিত হয় যেখানে এটি শেষবার ব্যবহৃত হয়েছিল। যদি ActivityOptions#setTargetDisplayId() ব্যবহার করে টার্গেট ডিসপ্লে নির্দিষ্ট করা হয়, তাহলে অ্যাক্টিভিটিটি সেই ডিসপ্লেতে স্থানান্তরিত হয় (যদি নিরাপত্তা এবং অন্যান্য বিধিনিষেধ দ্বারা অনুমোদিত হয়)।

নিরাপত্তা বিধিনিষেধ

কোনো ক্ষতিকারক অ্যাপ যাতে তার তৈরি করা ভার্চুয়াল ডিসপ্লে থেকে ব্যবহারকারীর সংবেদনশীল তথ্য পড়ে আত্মসাৎ করতে না পারে, সেজন্য অ্যান্ড্রয়েড ১০-এ অ্যাপগুলো শুধুমাত্র তাদের নিজেদের তৈরি ভার্চুয়াল ডিসপ্লেতেই নিজেদের অ্যাক্টিভিটি চালু করতে পারে। তবে:

  • যেসব সিস্টেম কম্পোনেন্টের INTERNAL_SYSTEM_WINDOW পারমিশন আছে, সেগুলো যেকোনো ডিসপ্লেতে চালু হতে পারে।
  • ACTIVITY_EMBEDDING পারমিশন থাকা কলাররা অন্য অ্যাপের সেইসব অ্যাক্টিভিটি চালু করতে পারে যেগুলিতে ActivityInfo.FLAG_ALLOW_EMBEDDED ফ্ল্যাগটি রয়েছে।
  • ব্যক্তিগত ডিসপ্লেতে কার্যকলাপ চালু করার অনুমতি শুধুমাত্র সেই ডিসপ্লের মালিক বা সেখানে উপস্থিত কার্যকলাপের জন্যই রয়েছে।

ডিসপ্লেতে উইন্ডো যোগ করার ক্ষেত্রেও একই ধরনের বিধিনিষেধ প্রযোজ্য।

ডিসপ্লেতে অ্যাপটি চালু করার চেষ্টা করার আগে এর নিরাপত্তা বিধিনিষেধ পরীক্ষা করার জন্য অ্যান্ড্রয়েড ১০-এ ActivityManager#isActivityStartAllowedOnDisplay(Context context, int displayId, Intent intent) মেথডটি অন্তর্ভুক্ত রয়েছে। অ্যান্ড্রয়েড ৯ (এবং এর নিচের সংস্করণগুলোতে), বিধিনিষেধযুক্ত লঞ্চের ফলে SecurityException থ্রো হয়।

অধিকাংশ নিরাপত্তা বিধিনিষেধ ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay() মেথডটিতে প্রয়োগ করা হয়।