আপনার অ্যাপ থেকে একটি ফোরগ্রাউন্ড পরিষেবা চালু করার দুটি ধাপ রয়েছে। প্রথমে, আপনাকে context.startForegroundService() কল করে পরিষেবাটি শুরু করতে হবে। তারপর, পরিষেবাটিকে একটি ফোরগ্রাউন্ড পরিষেবাতে প্রচার করার জন্য ServiceCompat.startForeground() কল করতে হবে।
পূর্বশর্ত
আপনার অ্যাপ কোন API লেভেল টার্গেট করে তার উপর নির্ভর করে, কোন অ্যাপ কখন ফোরগ্রাউন্ড পরিষেবা চালু করতে পারে তার উপর কিছু বিধিনিষেধ রয়েছে।
যেসব অ্যাপ Android 12 (API লেভেল 31) বা তার বেশি ভার্সনের জন্য কাজ করে, সেসব অ্যাপ ব্যাকগ্রাউন্ডে থাকা অবস্থায় ফোরগ্রাউন্ড পরিষেবা শুরু করতে পারবে না, কিছু নির্দিষ্ট ব্যতিক্রম ছাড়া। আরও তথ্যের জন্য এবং এই নিয়মের ব্যতিক্রম সম্পর্কে তথ্যের জন্য, ব্যাকগ্রাউন্ড থেকে ফোরগ্রাউন্ড পরিষেবা শুরু করার বিধিনিষেধ দেখুন।
Android 14 (API লেভেল 34) বা তার বেশি ভার্সনের অ্যাপগুলিকে ফোরগ্রাউন্ড সার্ভিস টাইপের জন্য উপযুক্ত অনুমতির অনুরোধ করতে হবে। যখন অ্যাপটি ফোরগ্রাউন্ডে কোনও পরিষেবা প্রচার করার চেষ্টা করে, তখন সিস্টেম উপযুক্ত অনুমতি পরীক্ষা করে এবং অ্যাপটিতে কোনও অনুপস্থিত থাকলে
SecurityExceptionথ্রো করে। উদাহরণস্বরূপ, যদি আপনিlocationটাইপের একটি ফোরগ্রাউন্ড সার্ভিস চালু করার চেষ্টা করেন, তাহলে সিস্টেমটি পরীক্ষা করে নিশ্চিত করে যে আপনার অ্যাপটিতে ইতিমধ্যেইACCESS_COARSE_LOCATIONঅথবাACCESS_FINE_LOCATIONঅনুমতি আছে। ফোরগ্রাউন্ড সার্ভিস টাইপ ডকুমেন্টেশন প্রতিটি ফোরগ্রাউন্ড সার্ভিস টাইপের জন্য প্রয়োজনীয় পূর্বশর্তগুলি তালিকাভুক্ত করে।
একটি পরিষেবা চালু করুন
একটি ফোরগ্রাউন্ড পরিষেবা চালু করার জন্য, আপনাকে প্রথমে এটি একটি সাধারণ (অ-ফোরগ্রাউন্ড) পরিষেবা হিসাবে চালু করতে হবে:
কোটলিন
val intent = Intent(...) // Build the intent for the service context.startForegroundService(intent)
জাভা
Context context = getApplicationContext(); Intent intent = new Intent(...); // Build the intent for the service context.startForegroundService(intent);
কোড সম্পর্কে গুরুত্বপূর্ণ বিষয়সমূহ
- কোড স্নিপেটটি একটি পরিষেবা চালু করে। তবে, পরিষেবাটি এখনও ফোরগ্রাউন্ডে চলছে না। পরিষেবাটির ভিতরেই, পরিষেবাটিকে ফোরগ্রাউন্ড পরিষেবাতে উন্নীত করার জন্য আপনাকে
ServiceCompat.startForeground()কল করতে হবে।
সামনের সারিতে কোনও পরিষেবা প্রচার করুন
একবার কোনও পরিষেবা চালু হয়ে গেলে, আপনাকে ServiceCompat.startForeground() এ কল করে পরিষেবাটি ফোরগ্রাউন্ডে চালানোর অনুরোধ করতে হবে। সাধারণত আপনি পরিষেবার onStartCommand() পদ্ধতিতে এই পদ্ধতিটি কল করবেন।
ServiceCompat.startForeground() নিম্নলিখিত পরামিতিগুলি গ্রহণ করে:
- সেবাটি।
- একটি ধনাত্মক পূর্ণসংখ্যা যা স্ট্যাটাস বারে পরিষেবার বিজ্ঞপ্তিকে অনন্যভাবে সনাক্ত করে।
-
Notificationবস্তু নিজেই। - অগ্রভাগের পরিষেবার ধরণ বা পরিষেবা দ্বারা সম্পাদিত কাজ চিহ্নিতকারী প্রকারগুলি
নির্দিষ্ট ব্যবহারের ক্ষেত্রে নির্ভর করে ম্যানিফেস্টে ঘোষিত startForeground() প্রকারগুলিতে আপনি যে ফোরগ্রাউন্ড পরিষেবা প্রকারগুলি পাস করেন। তারপর, যদি আপনার আরও পরিষেবা প্রকার যোগ করার প্রয়োজন হয়, তাহলে আপনি আবার startForeground() কল করতে পারেন।
উদাহরণস্বরূপ, ধরুন একটি ফিটনেস অ্যাপ একটি রানিং-ট্র্যাকার পরিষেবা চালায় যার সর্বদা location তথ্যের প্রয়োজন হয়, কিন্তু মিডিয়া চালানোর প্রয়োজন হতে পারে বা নাও হতে পারে। আপনাকে ম্যানিফেস্টে location এবং mediaPlayback উভয়ই ঘোষণা করতে হবে। যদি কোনও ব্যবহারকারী রান শুরু করে এবং কেবল তাদের অবস্থান ট্র্যাক করতে চায়, তাহলে আপনার অ্যাপটি startForeground() কল করবে এবং কেবল ACCESS_FINE_LOCATION অনুমতি পাস করবে। তারপর, যদি ব্যবহারকারী অডিও চালানো শুরু করতে চায়, তাহলে আবার startForeground() কল করবে এবং সমস্ত ফোরগ্রাউন্ড পরিষেবা ধরণের (এই ক্ষেত্রে, ACCESS_FINE_LOCATION|FOREGROUND_SERVICE_MEDIA_PLAYBACK ) বিটওয়াইজ সংমিশ্রণ পাস করবে।
নিচের উদাহরণটি একটি ক্যামেরা পরিষেবা ফোরগ্রাউন্ড পরিষেবায় নিজেকে প্রচার করার জন্য যে কোডটি ব্যবহার করবে তা দেখায়:
কোটলিন
class MyCameraService: Service() { private fun startForeground() { // Before starting the service as foreground check that the app has the // appropriate runtime permissions. In this case, verify that the user has // granted the CAMERA permission. val cameraPermission = PermissionChecker.checkSelfPermission(this, Manifest.permission.CAMERA) if (cameraPermission != PermissionChecker.PERMISSION_GRANTED) { // Without camera permissions the service cannot run in the foreground // Consider informing user or updating your app UI if visible. stopSelf() return } try { val notification = NotificationCompat.Builder(this, "CHANNEL_ID") // Create the notification to display while the service is running .build() ServiceCompat.startForeground( /* service = */ this, /* id = */ 100, // Cannot be 0 /* notification = */ notification, /* foregroundServiceType = */ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA } else { 0 }, ) } catch (e: Exception) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && e is ForegroundServiceStartNotAllowedException) { // App not in a valid state to start foreground service // (e.g. started from bg) } // ... } } }
জাভা
public class MyCameraService extends Service { private void startForeground() { // Before starting the service as foreground check that the app has the // appropriate runtime permissions. In this case, verify that the user // has granted the CAMERA permission. int cameraPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA); if (cameraPermission == PackageManager.PERMISSION_DENIED) { // Without camera permissions the service cannot run in the // foreground. Consider informing user or updating your app UI if // visible. stopSelf(); return; } try { Notification notification = new NotificationCompat.Builder(this, "CHANNEL_ID") // Create the notification to display while the service // is running .build(); int type = 0; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { type = ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA; } ServiceCompat.startForeground( /* service = */ this, /* id = */ 100, // Cannot be 0 /* notification = */ notification, /* foregroundServiceType = */ type ); } catch (Exception e) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && e instanceof ForegroundServiceStartNotAllowedException ) { // App not in a valid state to start foreground service // (e.g started from bg) } // ... } } //... }
কোড সম্পর্কে গুরুত্বপূর্ণ বিষয়সমূহ
- অ্যাপটি ইতিমধ্যেই ম্যানিফেস্টে ঘোষণা করেছে যে তাদের
CAMERAঅনুমতি প্রয়োজন। তবে, ব্যবহারকারী সেই অনুমতিটি দিয়েছেন কিনা তা নিশ্চিত করার জন্য অ্যাপটিকে রানটাইমের সময় পরীক্ষা করতে হবে। যদি অ্যাপটির আসলে সঠিক অনুমতি না থাকে, তাহলে এটি ব্যবহারকারীকে সমস্যাটি সম্পর্কে জানাবে। - অ্যান্ড্রয়েড প্ল্যাটফর্মের বিভিন্ন সংস্করণের সাথে বিভিন্ন ধরণের ফোরগ্রাউন্ড পরিষেবা চালু করা হয়েছিল। এই কোডটি অ্যান্ড্রয়েডের কোন সংস্করণে চলছে তা পরীক্ষা করে এবং উপযুক্ত অনুমতির অনুরোধ করে।
- কোডটি
ForegroundServiceStartNotAllowedExceptionপরীক্ষা করে যদি এটি এমন পরিস্থিতিতে ফোরগ্রাউন্ড পরিষেবা শুরু করার চেষ্টা করে যা অনুমোদিত নয় (উদাহরণস্বরূপ, যদি এটি অ্যাপটি ব্যাকগ্রাউন্ডে থাকা অবস্থায় ফোরগ্রাউন্ডে পরিষেবা প্রচার করার চেষ্টা করে)।