Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

ऐप बंद होने पर भी एंड्रॉइड नोटिफिकेशन कैसे प्राप्त करें?

यह गाइड दर्शाता है कि **फोरग्राउंड सर्विस** और **WorkManager** का उपयोग करके ऐप पूरी तरह से बंद (स्वाइप करके हाल के ऐप्स से हटाए जाने) के बाद भी नोटिफिकेशन कैसे डिलीवर किए जाएँ।

दृष्टिकोण तुलना

दृष्टिकोणउपयोग का मामलाविश्वसनीयता
फोरग्राउंड सर्विसनिरंतर पृष्ठभूमि कार्य (संगीत, स्थान, सिंक)उच्च - सतत प्रक्रिया
WorkManagerआवधिक/विलंबित कार्य (बैकअप, सिंक, रिमाइंडर)उच्च - सिस्टम-प्रबंधित, डोज़/ऐप स्टैंडबाय से बचता है
FCM (फायरबेस)सर्वर-पुश नोटिफिकेशनउच्चतम - सिस्टम-स्तरीय डिलीवरी
AlarmManager (सटीक)सटीक समय अलार्ममध्यम - डोज़ मोड से प्रभावित

विधि 1: WorkManager (आधुनिक, अनुशंसित)

गारंटीकृत निष्पादन के साथ आवधिक/विलंबित नोटिफिकेशन के लिए सर्वोत्तम।

निर्भरताएँ (build.gradle)

dependencies {
    implementation "androidx.work:work-runtime-ktx:2.9.0"
    // या Java के लिए: implementation "androidx.work:work-runtime:2.9.0"
}

NotificationWorker.java

package com.example.backgroundnotification;

import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.core.app.NotificationCompat;
import androidx.work.Worker;
import androidx.work.WorkerParameters;

public class NotificationWorker extends Worker {

    private static final String CHANNEL_ID = "background_channel";
    private static final String CHANNEL_NAME = "पृष्ठभूमि नोटिफिकेशन";

    public NotificationWorker(@NonNull Context context, @NonNull WorkerParameters params) {
        super(context, params);
    }

    @NonNull
    @Override
    public Result doWork() {
        showNotification();
        return Result.success();
    }

    private void showNotification() {
        createNotificationChannel();

        NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext(), CHANNEL_ID)
            .setSmallIcon(R.drawable.ic_launcher_foreground)
            .setContentTitle("पृष्ठभूमि नोटिफिकेशन")
            .setContentText("ऐप बंद होने पर भी डिलीवर किया गया!")
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setAutoCancel(true);

        NotificationManager manager = (NotificationManager) getApplicationContext()
            .getSystemService(Context.NOTIFICATION_SERVICE);
        manager.notify((int) System.currentTimeMillis(), builder.build());
    }

    private void createNotificationChannel() {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel(
                CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
            NotificationManager manager = getApplicationContext().getSystemService(NotificationManager.class);
            manager.createNotificationChannel(channel);
        }
    }
}

MainActivity.java - WorkManager शेड्यूल करना

package com.example.backgroundnotification;

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.work.ExistingPeriodicWorkPolicy;
import androidx.work.PeriodicWorkRequest;
import androidx.work.WorkManager;
import java.util.concurrent.TimeUnit;

public class MainActivity extends AppCompatActivity {

    private static final String WORK_NAME = "periodic_notification_work";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // ऐप बंद होने पर भी हर 30 मिनट में नोटिफिकेशन शेड्यूल करें
        findViewById(R.id.btnSchedule).setOnClickListener(v -> schedulePeriodicNotification());
        findViewById(R.id.btnCancel).setOnClickListener(v -> cancelPeriodicNotification());
    }

    private void schedulePeriodicNotification() {
        PeriodicWorkRequest workRequest = new PeriodicWorkRequest.Builder(
            NotificationWorker.class, 30, TimeUnit.MINUTES)
            .build();

        WorkManager.getInstance(this).enqueueUniquePeriodicWork(
            WORK_NAME, 
            ExistingPeriodicWorkPolicy.KEEP, 
            workRequest);
    }

    private void cancelPeriodicNotification() {
        WorkManager.getInstance(this).cancelUniqueWork(WORK_NAME);
    }
}

विधि 2: फोरग्राउंड सर्विस (निरंतर पृष्ठभूमि उपस्थिति)

जब ऐप को सक्रिय रूप से पृष्ठभूमि में कुछ करते रहने की आवश्यकता होती है (उदाहरण के लिए, संगीत प्लेबैक, स्थान ट्रैकिंग)।

NotificationService.java

package com.example.backgroundnotification;

import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;

public class NotificationService extends Service {

    private static final String CHANNEL_ID = "foreground_service_channel";
    private static final int NOTIFICATION_ID = 1001;

    @Override
    public void onCreate() {
        super.onCreate();
        createNotificationChannel();
        startForeground(NOTIFICATION_ID, buildNotification());
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // पृष्ठभूमि कार्य यहाँ करें
        // समय-समय पर नोटिफिकेशन दिखाने के लिए टाइमर/हैंडलर शेड्यूल कर सकते हैं
        return START_STICKY; // मार दिए जाने पर पुनः आरंभ करता है
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    private Notification buildNotification() {
        return new NotificationCompat.Builder(this, CHANNEL_ID)
            .setSmallIcon(R.drawable.ic_launcher_foreground)
            .setContentTitle("फोरग्राउंड सर्विस सक्रिय")
            .setContentText("पृष्ठभूमि में चल रहा है - नोटिफिकेशन डिलीवर कर सकता है")
            .setPriority(NotificationCompat.PRIORITY_LOW) // कम प्राथमिकता = कम दखल देने वाला
            .setOngoing(true)
            .build();
    }

    private void createNotificationChannel() {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel(
                CHANNEL_ID, "फोरग्राउंड सर्विस", NotificationManager.IMPORTANCE_LOW);
            channel.setDescription("पृष्ठभूमि संचालन के लिए फोरग्राउंड सर्विस चैनल");
            NotificationManager manager = getSystemService(NotificationManager.class);
            manager.createNotificationChannel(channel);
        }
    }
}

सेवा शुरू करना (MainActivity से)

// फोरग्राउंड सर्विस शुरू करें (ऐप "बंद" होने पर भी चलती रहती है)
Intent serviceIntent = new Intent(this, NotificationService.class);
ContextCompat.startForegroundService(this, serviceIntent);

// बाद में रोकने के लिए:
stopService(new Intent(this, NotificationService.class));

AndroidManifest.xml - आवश्यक अनुमतियाँ और घोषणाएँ

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.backgroundnotification">

    <!-- Android 13+ के लिए नोटिफिकेशन अनुमति -->
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
    
    <!-- फोरग्राउंड सर्विस के लिए (Android 9+) -->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.BackgroundNotification">

        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- फोरग्राउंड सर्विस घोषणा -->
        <service
            android:name=".NotificationService"
            android:exported="false"
            android:foregroundServiceType="dataSync" />

        <!-- WorkManager स्वतः पंजीकृत होता है -->
    </application>
</manifest>

महत्वपूर्ण: Android 13+ (API 33) नोटिफिकेशन अनुमति

रनटाइम पर अनुरोध करना आवश्यक:

// एक्टिविटी में, नोटिफिकेशन दिखाने से पहले:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    if (checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) 
        != PackageManager.PERMISSION_GRANTED) {
        requestPermissions(new String[]{Manifest.permission.POST_NOTIFICATIONS}, 1001);
    }
}

सर्वोत्तम अभ्यास सारांश

  1. WorkManager का उपयोग करें आवधिक/विलंबित नोटिफिकेशन के लिए - बैटरी-अनुकूलित, सिस्टम-प्रबंधित
  2. फोरग्राउंड सर्विस का उपयोग करें निरंतर पृष्ठभूमि संचालन के लिए - दृश्यमान नोटिफिकेशन आवश्यक
  3. FCM का उपयोग करें सर्वर-आरंभित पुश के लिए - सबसे विश्वसनीय डिलीवरी
  4. POST_NOTIFICATIONS अनुमति Android 13+ पर रनटाइम पर अनुरोध करें
  5. नोटिफिकेशन चैनल सभी Android 8.0+ नोटिफिकेशन के लिए बनाएँ

चेतावनी

बहुत अधिक पृष्ठभूमि नोटिफिकेशन भेजने से उपयोगकर्ता द्वारा ऐप अनइंस्टॉल किया जा सकता है या सिस्टम द्वारा प्रतिबंधित किया जा सकता है। Android के पावर प्रबंधन (डोज़, ऐप स्टैंडबाय) का सम्मान करें।

  1. किसी भी एंड्रॉयड फोन पर Google Camera ऐप कैसे प्राप्त करें किसी भी एंड्रॉयड फोन पर Google Camera ऐप कैसे प्राप्त करें

    जब स्मार्टफोन फोटोग्राफी की बात आती है, तो सबसे आकस्मिक पर्यवेक्षक ने भी एक आवर्ती विषय देखा होगा: सॉफ्टवेयर वास्तव में महत्वपूर्ण है। इस क्षेत्र में स्थापित नेता Pixel फोन के लिए डिज़ाइन किया गया Google Camera ऐप है। एंड्रॉयड के मोडिंग समुदाय की बदौलत Google Camera अब बहुत अधिक व्यापक रूप से उपलब्

  1. एंड्रॉइड पर तस्वीर लेते समय नोटिफिकेशन कैसे ब्लॉक करें एंड्रॉइड पर तस्वीर लेते समय नोटिफिकेशन कैसे ब्लॉक करें

    स्मार्टफोन कैमरा कितने शक्तिशाली हो गए हैं, तस्वीरें लेना इतना आसान है। लेकिन नोटिफिकेशन गलत समय पर दिखाई दे सकते हैं, जैसे जब आप तस्वीर लेने वाले हों। चूंकि लगभग हर चीज के लिए एक ऐप है, इसलिए एक ऐप भी है जो आपको उस परफेक्ट तस्वीर को लेते समय नोटिफिकेशन से परेशान होने से रोकता है। यह एक फ्री ऐप है

  1. विंडोज 10 पर सीधे एंड्रॉइड फोन अलर्ट प्राप्त करें: चरण-दर-चरण मार्गदर्शिका विंडोज 10 पर सीधे एंड्रॉइड फोन अलर्ट प्राप्त करें: चरण-दर-चरण मार्गदर्शिका

    एंड्रॉइड दुनिया में सबसे अधिक उपयोग किए जाने वाले ऑपरेटिंग सिस्टम में से एक है, जिसमें बड़ी संख्या में उपयोगकर्ता हैं। अब जब एंड्रॉइड द्वारा संचालित स्मार्टफोन बेहतर हो रहे हैं, तो आप विंडोज 10 पर एंड्रॉइड नोटिफिकेशन प्राप्त करने में सक्षम हैं। इस तरह, यदि आप काम कर रहे हैं या आपका फोन दूर रखा है, त