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

एंड्रॉइड में निश्चित समय के बाद नोटिफिकेशन कैसे हटाएं?

Handler के साथ ऑटो-डिसमिस नोटिफिकेशन

Handler.postDelayed() का उपयोग करके निर्दिष्ट समय बाद NotificationManager.cancel(id) कॉल करके नोटिफिकेशन ऑटोमैटिकली हटाएं।

चरण 1-2: प्रोजेक्ट और लेआउट (ConstraintLayout में बटन)

चरण 3: MainActivity.java

package app.tutorialspoint.com.notifyme;

import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.NotificationCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    public static final String NOTIFICATION_CHANNEL_ID = "10001";
    private static final String DEFAULT_CHANNEL_ID = "default";

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

        Button btnCreateNotification = findViewById(R.id.btnCreateNotification);
        btnCreateNotification.setOnClickListener(v -> {
            // टैप इंटेंट
            Intent notificationIntent = new Intent(MainActivity.this, MainActivity.class);
            notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);
            notificationIntent.setAction(Intent.ACTION_MAIN);
            notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
            PendingIntent resultIntent = PendingIntent.getActivity(
                MainActivity.this, 0, notificationIntent, 
                PendingIntent.FLAG_IMMUTABLE
            );

            NotificationCompat.Builder builder = new NotificationCompat.Builder(this, DEFAULT_CHANNEL_ID)
                .setSmallIcon(R.drawable.ic_launcher_foreground)
                .setContentTitle("ऑटो-रिमूव टेस्ट")
                .setContentIntent(resultIntent)
                .setStyle(new NotificationCompat.InboxStyle())
                .setContentText("यह नोटिफिकेशन 5 सेकंड बाद अपने आप हट जाएगा")
                .setAutoCancel(true);

            final NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationChannel channel = new NotificationChannel(
                    NOTIFICATION_CHANNEL_ID, "ऑटो-रिमूव चैनल", NotificationManager.IMPORTANCE_HIGH);
                builder.setChannelId(NOTIFICATION_CHANNEL_ID);
                assert manager != null;
                manager.createNotificationChannel(channel);
            }

            final int notificationId = (int) System.currentTimeMillis();
            assert manager != null;
            manager.notify(notificationId, builder.build());

            // 5 सेकंड (5000ms) बाद कैंसिल करें
            new Handler().postDelayed(() -> {
                manager.cancel(notificationId);
            }, 5000);
        });
    }
}

चरण 4: AndroidManifest.xml

बेहतर विकल्प: WorkManager (ऐप बंद होने पर भी काम करता है)

// Worker क्लास
public class CancelNotificationWorker extends Worker {
    public CancelNotificationWorker(@NonNull Context context, @NonNull WorkerParameters params) {
        super(context, params);
    }

    @NonNull
    @Override
    public Result doWork() {
        int notificationId = getInputData().getInt("notification_id", -1);
        if (notificationId != -1) {
            NotificationManager manager = (NotificationManager) 
                context.getSystemService(Context.NOTIFICATION_SERVICE);
            manager.cancel(notificationId);
        }
        return Result.success();
    }
}

// शेड्यूल करना (MainActivity में)
OneTimeWorkRequest cancelWork = new OneTimeWorkRequest.Builder(CancelNotificationWorker.class)
    .setInputData(new Data.Builder().putInt("notification_id", notificationId).build())
    .setInitialDelay(5, TimeUnit.SECONDS)
    .build();
WorkManager.getInstance(this).enqueue(cancelWork);

तुलना

तरीकाफायदानुकसान
Handler.postDelayedसरल, कोई निर्भरता नहींऐप प्रोसेस मरने पर कैंसिल नहीं होता
AlarmManagerसिस्टम-लेवल, ऐप किल होने पर भी चलता हैजटिल, सटीक अलार्म के लिए परमिशन चाहिए
WorkManagerजीवनचक्र-अवेयर, बैटरी-अनुकूलित, गारंटीड एक्सीक्यूशनथोड़ा ओवरहेड, Jetpack निर्भरता

नोटिफिकेशन चैनल में टाइमआउट (API 26+)

चैनल लेवल पर setTimeoutAfter(millis) सेट कर सकते हैं, लेकिन यह केवल नोटिफिकेशन को शेड से हटाता है, कैंसिल नहीं करता।

  1. Android में प्रोग्रामेटिकली नोटिफिकेशन बार से नोटिफिकेशन कैसे हटाएं? Android में प्रोग्रामेटिकली नोटिफिकेशन बार से नोटिफिकेशन कैसे हटाएं?

    Android में प्रोग्रामेटिकली नोटिफिकेशन बार से नोटिफिकेशन हटाना यह उदाहरण दर्शाता है कि Android में प्रोग्रामेटिकली नोटिफिकेशन बार से नोटिफिकेशन कैसे हटाया जाता है। चरण 1 - नया प्रोजेक्ट बनाएं Android Studio में File → New Project पर जाएं और नया प्रोजेक्ट बनाने के लिए सभी आवश्यक विवरण भरें। चरण 2 -

  1. रनटाइम पर Android व्यू का आकार कैसे निर्धारित करें? रनटाइम पर Android व्यू का आकार कैसे निर्धारित करें?

    रनटाइम पर व्यू का आकार प्राप्त करना यह उदाहरण दर्शाता है कि ViewTreeObserver.OnGlobalLayoutListener का उपयोग करके रनटाइम पर किसी भी व्यू की चौड़ाई और ऊंचाई कैसे प्राप्त करें। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project से प्रोजेक्ट बनाएं। चरण 2: लेआउट में ImageView और TextView

  1. एंड्रॉइड से मैलवेयर कैसे हटाएं? एंड्रॉइड से मैलवेयर कैसे हटाएं?

    परिचय स्मार्टफोन में बैंकिंग ऐप्स, व्यक्तिगत डेटा, स्थान इतिहास आदि संवेदनशील जानकारी होती है। एंड्रॉइड डिवाइस भी कंप्यूटर की तरह मैलवेयर (वायरस, ट्रोजन, स्पायवेयर, एडवेयर, रैंसमवेयर) से संक्रमित हो सकते हैं। मैलवेयर कैसे प्रवेश करता है? असुरक्षित स्रोतों/थर्ड-पार्टी ऐप स्टोर्स से ऐप इंस्टॉल करना