ব্যাকগ্রাউন্ড থেকে কার্যক্রম শুরু করার উপর নিষেধাজ্ঞা

অ্যান্ড্রয়েড ১০ (এপিআই লেভেল ২৯) এবং তার উচ্চতর সংস্করণগুলি ব্যাকগ্রাউন্ডে অ্যাপ চলাকালীন কখন অ্যাপগুলি কার্যকলাপ শুরু করতে পারে তার উপর বিধিনিষেধ আরোপ করে। এই বিধিনিষেধগুলি ব্যবহারকারীর জন্য বাধা কমাতে সাহায্য করে এবং ব্যবহারকারীকে তাদের স্ক্রিনে কী দেখানো হচ্ছে তার উপর আরও নিয়ন্ত্রণ রাখতে সাহায্য করে।

এই নির্দেশিকাটি ব্যাকগ্রাউন্ড থেকে কার্যক্রম শুরু করার বিকল্প হিসেবে বিজ্ঞপ্তি উপস্থাপন করে। এটি সেই নির্দিষ্ট ক্ষেত্রেও তালিকাভুক্ত করে যেখানে সীমাবদ্ধতা প্রযোজ্য নয়।

পরিবর্তে বিজ্ঞপ্তিগুলি প্রদর্শন করুন

প্রায় সব ক্ষেত্রেই, ব্যাকগ্রাউন্ডে থাকা অ্যাপগুলিকে সরাসরি কোনও কার্যকলাপ শুরু করার পরিবর্তে ব্যবহারকারীকে জরুরি তথ্য প্রদানের জন্য সময়-সংবেদনশীল বিজ্ঞপ্তি প্রদর্শন করতে হবে। এই ধরনের বিজ্ঞপ্তিগুলির মধ্যে একটি ইনকামিং ফোন কল বা একটি সক্রিয় অ্যালার্ম ঘড়ি পরিচালনা করা অন্তর্ভুক্ত।

এই বিজ্ঞপ্তি-ভিত্তিক সতর্কতা এবং অনুস্মারক ব্যবস্থা ব্যবহারকারীদের জন্য বেশ কিছু সুবিধা প্রদান করে:

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

অ্যাপগুলি কখন কার্যকলাপ শুরু করতে পারে

অ্যান্ড্রয়েড ১০ বা তার বেশি ভার্সনে চলমান অ্যাপগুলি নিম্নলিখিত এক বা একাধিক শর্ত পূরণ করলে কার্যক্রম শুরু করতে পারে:

  • অ্যাপটিতে একটি দৃশ্যমান উইন্ডো রয়েছে, যেমন ফোরগ্রাউন্ডে একটি কার্যকলাপ।
  • অ্যাপটির ফোরগ্রাউন্ড টাস্কের পিছনের স্ট্যাকে একটি অ্যাক্টিভিটি রয়েছে।
  • অ্যাপটিতে Recents স্ক্রিনে বিদ্যমান একটি টাস্কের পিছনের স্ট্যাকে একটি কার্যকলাপ রয়েছে।

  • অ্যাপটির একটি কার্যকলাপ আছে যা খুব সম্প্রতি শুরু হয়েছে।

  • খুব সম্প্রতি একটি অ্যাক্টিভিটিতে finish() নামক অ্যাপটি ব্যবহার করা হয়েছে। এটি কেবল তখনই প্রযোজ্য যখন অ্যাপটির ফোরগ্রাউন্ডে একটি অ্যাক্টিভিটি ছিল অথবা finish() কল করার সময় ফোরগ্রাউন্ড টাস্কের পিছনের স্ট্যাকে একটি অ্যাক্টিভিটি ছিল।

  • অ্যাপটিতে নিম্নলিখিত পরিষেবাগুলির মধ্যে একটি রয়েছে যা সিস্টেম দ্বারা আবদ্ধ। এই পরিষেবাগুলির জন্য একটি UI চালু করার প্রয়োজন হতে পারে।

  • অ্যাপটিতে এমন একটি পরিষেবা রয়েছে যা একটি ভিন্ন, দৃশ্যমান অ্যাপ দ্বারা আবদ্ধ। অ্যাপটির পটভূমিতে সফলভাবে কার্যক্রম শুরু করার জন্য পরিষেবার সাথে আবদ্ধ অ্যাপটিকে দৃশ্যমান থাকতে হবে।

  • অ্যাপটি সিস্টেম থেকে PendingIntent একটি বিজ্ঞপ্তি পায়। পরিষেবা এবং সম্প্রচার রিসিভারের জন্য মুলতুবি থাকা ইন্টেন্টের ক্ষেত্রে, মুলতুবি থাকা ইন্টেন্ট পাঠানোর কয়েক সেকেন্ড পরে অ্যাপটি কার্যক্রম শুরু করতে পারে।

  • অ্যাপটি একটি PendingIntent পায় যা একটি ভিন্ন, দৃশ্যমান অ্যাপ থেকে পাঠানো হয়।

  • অ্যাপটি একটি সিস্টেম ব্রডকাস্ট গ্রহণ করে যেখানে অ্যাপটি একটি UI চালু করবে বলে আশা করা হচ্ছে। উদাহরণগুলির মধ্যে রয়েছে ACTION_NEW_OUTGOING_CALL এবং SECRET_CODE_ACTION । ব্রডকাস্ট পাঠানোর পর অ্যাপটি কয়েক সেকেন্ডের জন্য কার্যকলাপ শুরু করতে পারে।

  • অ্যাপটি CompanionDeviceManager API এর মাধ্যমে একটি কম্প্যানিয়ন হার্ডওয়্যার ডিভাইসের সাথে যুক্ত। এই API ব্যবহারকারীর একটি পেয়ার করা ডিভাইসে করা অ্যাকশনের প্রতিক্রিয়ায় অ্যাপটিকে অ্যাক্টিভিটি শুরু করতে দেয়।

  • অ্যাপটি একটি ডিভাইস নীতি নিয়ন্ত্রক যা ডিভাইস মালিক মোডে চলছে। ব্যবহারের উদাহরণগুলির মধ্যে রয়েছে সম্পূর্ণরূপে পরিচালিত এন্টারপ্রাইজ ডিভাইসগুলির পাশাপাশি ডিজিটাল সাইনেজ এবং কিয়স্কের মতো ডেডিকেটেড ডিভাইস

  • ব্যবহারকারী অ্যাপটিকে SYSTEM_ALERT_WINDOW অনুমতি দিয়েছেন।

PendingIntents থেকে কার্যক্রম শুরু করার সময় অপ্ট-ইন প্রয়োজন

তালিকাভুক্ত শর্তাবলীর উপর ভিত্তি করে দুর্ঘটনাজনিত কার্যকলাপ শুরু হওয়ার অনুমতি এড়াতে, Android 14 থেকে শুরু করে এমন স্পষ্ট API রয়েছে যা আপনাকে কার্যকলাপ শুরুর জন্য একটি অ্যাপের অনুমতি প্রদান বন্ধ করতে বা বন্ধ করতে দেয়।

অ্যান্ড্রয়েড ১৫ বা তার উচ্চতর ভার্সনের জন্য তৈরি অ্যাপগুলি আর পরোক্ষভাবে ব্যাকগ্রাউন্ড অ্যাক্টিভিটি লঞ্চ (BAL) সুবিধা প্রদান করবে না। স্পষ্ট অপ্ট-ইন প্রয়োজন, এটি করার জন্য, অ্যাপটি PendingIntents পাঠাচ্ছে বা তৈরি করছে কিনা PendingIntents উপর নির্ভর করে এই বিকল্পগুলি।

মুলতুবি থাকা ইন্টেন্ট টেবিল
চিত্র ১: ব্যাকগ্রাউন্ড অ্যাক্টিভিটি লঞ্চের জন্য সিদ্ধান্ত প্রবাহ।

মুলতুবি অভিপ্রায় প্রেরকের দ্বারা

Android 14 বা তার উচ্চতর ভার্সনকে লক্ষ্য করে এমন অ্যাপ যারা PendingIntent শুরু করতে চায় তাদের অবশ্যই

  • তালিকাভুক্ত শর্তাবলী পূরণ করুন এবং
  • এই ব্যতিক্রমগুলির উপর ভিত্তি করে ব্যাকগ্রাউন্ড অ্যাক্টিভিটি লঞ্চের অনুমতি দেওয়ার জন্য নির্বাচন করুন

এই অপ্ট-ইনটি কেবল তখনই করা উচিত যদি অ্যাপ ডেভেলপার জানেন যে অ্যাপটি একটি কার্যকলাপ শুরু করতে চলেছে।

অপ্ট ইন করার জন্য, অ্যাপটিকে setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) সহ একটি ActivityOptions বান্ডেল PendingIntent.send() বা অনুরূপ পদ্ধতিতে পাস করতে হবে।

মুলতুবি ইন্টেন্টের স্রষ্টার দ্বারা

Android 15 বা তার উচ্চতর ভার্সনগুলিকে লক্ষ্য করে এমন অ্যাপগুলি যারা PendingIntent তৈরি করে, তাদের এখন স্পষ্টভাবে ব্যাকগ্রাউন্ড অ্যাক্টিভিটি লঞ্চের অনুমতি দেওয়ার জন্য নির্বাচন করতে হবে যদি তারা তালিকাভুক্ত শর্তাবলীর অধীনে PendingIntents চালু করতে চায়।

বেশিরভাগ ক্ষেত্রে, PendingIntent শুরু করা অ্যাপটিকেই বেছে নেওয়া উচিত। তবে, যদি তৈরি করা অ্যাপটিকে এই সুযোগ-সুবিধাগুলি প্রদান করতে হয়:

  • তৈরির অ্যাপটি দৃশ্যমান হলে যেকোনো সময় PendingIntent শুরু করা যেতে পারে।
  • যদি তৈরি করা অ্যাপটির বিশেষ সুবিধা থাকে, তাহলে PendingIntent যেকোনো সময় শুরু করা যেতে পারে।

অপ্ট ইন করার জন্য, অ্যাপটিকে setPendingIntentCreatorBackgroundActivityStartMode (ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) সহ একটি ActivityOptions বান্ডেল PendingIntent.getActivity() বা অনুরূপ পদ্ধতিতে পাস করতে হবে।

আরও বিস্তারিত জানার জন্য প্রাসঙ্গিক রেফারেন্স ডকুমেন্টেশন পড়ুন:

কঠোর মোড

অ্যান্ড্রয়েড ১৬ থেকে শুরু করে, অ্যাপ ডেভেলপার স্ট্রাইক মোড সক্ষম করতে পারে যাতে কোনও অ্যাক্টিভিটি লঞ্চ ব্লক করা হলে (অথবা অ্যাপের টার্গেট SDK উত্থাপিত হলে ব্লক হওয়ার ঝুঁকি থাকে) বিজ্ঞপ্তি পাওয়া যায়।

আপনার অ্যাপ্লিকেশন, কার্যকলাপ, অথবা অন্যান্য অ্যাপ্লিকেশন উপাদানের Application.onCreate() পদ্ধতির শুরু থেকেই সক্রিয় করার জন্য উদাহরণ কোড:

 override fun onCreate(savedInstanceState: Bundle?) {
     super.onCreate(savedInstanceState)
     StrictMode.setVmPolicy(
         StrictMode.VmPolicy.Builder()
         .detectBlockedBackgroundActivityLaunch()
         .penaltyLog()
         .build());
     )
 }

আরও বিস্তারিত জানার জন্য স্ট্রিক মোড ডকুমেন্টেশনটি পড়ুন।