পটভূমি থেকে একটি ফোরগ্রাউন্ড পরিষেবা শুরু করার উপর নিষেধাজ্ঞা

যেসব অ্যাপ Android 12 (API লেভেল 31) বা তার বেশি ভার্সনের জন্য তৈরি, সেগুলো ব্যাকগ্রাউন্ডে চলাকালীন ফোরগ্রাউন্ড পরিষেবা শুরু করতে পারবে না, বিশেষ কিছু ক্ষেত্রে ছাড়া। যদি কোনও অ্যাপ ব্যাকগ্রাউন্ডে চলাকালীন ফোরগ্রাউন্ড পরিষেবা শুরু করার চেষ্টা করে এবং ফোরগ্রাউন্ড পরিষেবা ব্যতিক্রমী ক্ষেত্রের একটিতেও সন্তুষ্ট না হয়, তাহলে সিস্টেমটি একটি ForegroundServiceStartNotAllowedException ব্যবহার করে।

এছাড়াও, যদি কোনও অ্যাপ এমন একটি ফোরগ্রাউন্ড পরিষেবা চালু করতে চায় যার ব্যবহারের সময় অনুমতির প্রয়োজন হয় (যেমন, বডি সেন্সর, ক্যামেরা, মাইক্রোফোন, বা অবস্থানের অনুমতি), তাহলে অ্যাপটি ব্যাকগ্রাউন্ডে থাকা অবস্থায় পরিষেবা তৈরি করতে পারবে না, এমনকি যদি অ্যাপটি ব্যাকগ্রাউন্ড শুরুর বিধিনিষেধের মধ্যে পড়ে। এর কারণ "ব্যবহারের সময় অনুমতির প্রয়োজন এমন ফোরগ্রাউন্ড পরিষেবা শুরু করার বিধিনিষেধ" বিভাগে ব্যাখ্যা করা হয়েছে।

ব্যাকগ্রাউন্ড শুরুর বিধিনিষেধ থেকে অব্যাহতি

নিম্নলিখিত পরিস্থিতিতে, আপনার অ্যাপটি ব্যাকগ্রাউন্ডে চলার সময়ও ফোরগ্রাউন্ড পরিষেবা শুরু করতে পারে:

  • আপনার অ্যাপটি ব্যবহারকারীর দৃশ্যমান অবস্থা থেকে রূপান্তরিত হয়, যেমন একটি কার্যকলাপ
  • আপনার অ্যাপটি ব্যাকগ্রাউন্ড থেকে কোনও কার্যকলাপ শুরু করতে পারে, শুধুমাত্র সেই ক্ষেত্রে যেখানে অ্যাপটির কোনও বিদ্যমান কার্যের পিছনের স্ট্যাকে কোনও কার্যকলাপ থাকে।
  • আপনার অ্যাপটি Firebase Cloud Messaging ব্যবহার করে একটি উচ্চ অগ্রাধিকার বার্তা পায়।

  • ব্যবহারকারী আপনার অ্যাপের সাথে সম্পর্কিত একটি UI উপাদানের উপর একটি ক্রিয়া সম্পাদন করে। উদাহরণস্বরূপ, তারা একটি বুদবুদ , বিজ্ঞপ্তি , উইজেট , অথবা কার্যকলাপের সাথে ইন্টারঅ্যাক্ট করতে পারে।

  • আপনার অ্যাপ ব্যবহারকারীর অনুরোধ করা কোনও কাজ সম্পন্ন করার জন্য একটি সঠিক অ্যালার্ম আহ্বান করে।

  • আপনার অ্যাপটি হল ডিভাইসের বর্তমান ইনপুট পদ্ধতি

  • আপনার অ্যাপটি এমন একটি ইভেন্ট পেয়েছে যা জিওফেন্সিং বা কার্যকলাপ স্বীকৃতি পরিবর্তনের সাথে সম্পর্কিত।

  • ডিভাইসটি রিবুট হওয়ার পর এবং একটি ব্রডকাস্ট রিসিভারে ACTION_BOOT_COMPLETED , ACTION_LOCKED_BOOT_COMPLETED , অথবা ACTION_MY_PACKAGE_REPLACED ইন্টেন্ট অ্যাকশন গ্রহণ করার পর।

  • আপনার অ্যাপটি একটি ব্রডকাস্ট রিসিভারে ACTION_TIMEZONE_CHANGED , ACTION_TIME_CHANGED , অথবা ACTION_LOCALE_CHANGED ইন্টেন্ট অ্যাকশন গ্রহণ করে।

  • আপনার অ্যাপটি NfcService থেকে ACTION_TRANSACTION_DETECTED ইভেন্টটি গ্রহণ করে।

  • নির্দিষ্ট সিস্টেম ভূমিকা বা অনুমতি সহ অ্যাপ, যেমন ডিভাইস মালিক এবং প্রোফাইল মালিক

  • আপনার অ্যাপটি Companion Device Manager ব্যবহার করে এবং REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND অনুমতি অথবা REQUEST_COMPANION_RUN_IN_BACKGROUND অনুমতি ঘোষণা করে। যখনই সম্ভব, REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND ব্যবহার করুন।

  • ব্যবহারকারী আপনার অ্যাপের জন্য ব্যাটারি অপ্টিমাইজেশন বন্ধ করে দেয়।

  • আপনার অ্যাপটিতে SYSTEM_ALERT_WINDOW অনুমতি আছে। দ্রষ্টব্য: যদি আপনার অ্যাপটি Android 15 বা তার উচ্চতর সংস্করণের জন্য উপযুক্ত হয়, তাহলে এটির SYSTEM_ALERT_WINDOW অনুমতি থাকতে হবে এবং অ্যাপটিতে বর্তমানে একটি দৃশ্যমান ওভারলে উইন্ডো থাকতে হবে।

ব্যবহারের সময় অনুমতির প্রয়োজন এমন ফোরগ্রাউন্ড পরিষেবা শুরু করার উপর বিধিনিষেধ

অ্যান্ড্রয়েড ১৪ (এপিআই লেভেল ৩৪) বা তার উচ্চতর সংস্করণে, যদি আপনি এমন একটি ফোরগ্রাউন্ড পরিষেবা শুরু করেন যার জন্য ব্যবহারের সময় অনুমতির প্রয়োজন হয়, তাহলে বিশেষ পরিস্থিতি সম্পর্কে সচেতন থাকতে হবে।

যদি আপনার অ্যাপটি Android 14 বা তার পরবর্তী ভার্সনের জন্য তৈরি হয়, তাহলে অপারেটিং সিস্টেমটি একটি ফোরগ্রাউন্ড পরিষেবা তৈরি করার সময় পরীক্ষা করে দেখে যে আপনার অ্যাপটিতে সেই ধরণের পরিষেবার জন্য সমস্ত উপযুক্ত অনুমতি রয়েছে কিনা। উদাহরণস্বরূপ, যখন আপনি মাইক্রোফোন ধরণের একটি ফোরগ্রাউন্ড পরিষেবা তৈরি করেন, তখন অপারেটিং সিস্টেমটি যাচাই করে যে আপনার অ্যাপটির বর্তমানে RECORD_AUDIO অনুমতি রয়েছে। যদি আপনার সেই অনুমতি না থাকে, তাহলে সিস্টেমটি একটি SecurityException নিক্ষেপ করে।

ব্যবহারের সময় ব্যবহারের অনুমতির ক্ষেত্রে, এটি একটি সম্ভাব্য সমস্যার সৃষ্টি করে। যদি আপনার অ্যাপের ব্যবহারের সময় ব্যবহারের অনুমতি থাকে, তবে এটি কেবল ফোরগ্রাউন্ডে থাকাকালীনই সেই অনুমতি পাবে। এর অর্থ হল যদি আপনার অ্যাপটি ব্যাকগ্রাউন্ডে থাকে এবং এটি ক্যামেরা, অবস্থান বা মাইক্রোফোনের মতো একটি ফোরগ্রাউন্ড পরিষেবা তৈরি করার চেষ্টা করে, তবে সিস্টেমটি দেখতে পাবে যে আপনার অ্যাপটির বর্তমানে প্রয়োজনীয় অনুমতি নেই এবং এটি একটি SecurityException ছুঁড়ে দেয়।

একইভাবে, যদি আপনার অ্যাপটি ব্যাকগ্রাউন্ডে থাকে এবং এটি এমন একটি স্বাস্থ্য পরিষেবা তৈরি করে যার জন্য BODY_SENSORS অনুমতি প্রয়োজন, তবে অ্যাপটির বর্তমানে সেই অনুমতি নেই এবং সিস্টেমটি একটি ব্যতিক্রম দেয়। (এটি প্রযোজ্য নয় যদি এটি এমন একটি স্বাস্থ্য পরিষেবা হয় যার জন্য বিভিন্ন অনুমতি প্রয়োজন, যেমন ACTIVITY_RECOGNITION ।) PermissionChecker.checkSelfPermission() কল করা এই সমস্যাটি প্রতিরোধ করে না । যদি আপনার অ্যাপটিতে while-in-use অনুমতি থাকে এবং এটি checkSelfPermission() কল করে পরীক্ষা করে যে এটির সেই অনুমতি আছে কিনা, তাহলে পদ্ধতিটি PERMISSION_GRANTED ফেরত দেয়, এমনকি অ্যাপটি ব্যাকগ্রাউন্ডে থাকলেও। যখন পদ্ধতিটি PERMISSION_GRANTED ফেরত দেয়, তখন এটি বলে " অ্যাপটি ব্যবহারের সময় আপনার অ্যাপটির এই অনুমতি আছে।"

এই কারণে, যদি আপনার ফোরগ্রাউন্ড পরিষেবার জন্য ব্যবহারের সময় অনুমতির প্রয়োজন হয়, তাহলে আপনার অ্যাপে দৃশ্যমান কার্যকলাপ থাকাকালীন আপনাকে Context.startForegroundService() অথবা Context.bindService() কল করতে হবে, যদি না পরিষেবাটি নির্ধারিত ছাড়গুলির মধ্যে একটির মধ্যে পড়ে।

ব্যবহারের সময় অনুমতির উপর বিধিনিষেধ থেকে অব্যাহতি

কিছু পরিস্থিতিতে, অ্যাপটি ব্যাকগ্রাউন্ডে চলাকালীন কোনও ফোরগ্রাউন্ড পরিষেবা চালু করা হলেও, অ্যাপটি ফোরগ্রাউন্ডে চলাকালীন ("ব্যবহারের সময়") অবস্থান, ক্যামেরা এবং মাইক্রোফোনের তথ্য অ্যাক্সেস করতে পারে।

এই একই পরিস্থিতিতে, যদি পরিষেবাটি একটি ফোরগ্রাউন্ড পরিষেবা ধরণের location ঘোষণা করে এবং ACCESS_BACKGROUND_LOCATION অনুমতি আছে এমন একটি অ্যাপ দ্বারা শুরু হয়, তাহলে এই পরিষেবাটি সর্বদা অবস্থানের তথ্য অ্যাক্সেস করতে পারে, এমনকি অ্যাপটি ব্যাকগ্রাউন্ডে চলার সময়ও।

নিম্নলিখিত তালিকায় এই পরিস্থিতিগুলি রয়েছে:

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

আপনার অ্যাপে কোন পরিষেবাগুলি প্রভাবিত হবে তা নির্ধারণ করুন

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

Foreground service started from background can not have \
location/camera/microphone access: service SERVICE_NAME