ऐप क्लोज होने के बाद भी नोटिफिकेशन भेजना
जब यूजर ऐप को स्वाइप करके बंद कर देता है, तब भी नोटिफिकेशन भेजने के लिए Foreground Service या WorkManager का उपयोग करना पड़ता है। यह उदाहरण Service + Timer दिखाता है (पुराना तरीका, लेकिन समझने में आसान)।
चरण 1: नया प्रोजेक्ट
Android Studio में नया प्रोजेक्ट बनाएं।
चरण 2: लेआउट — ऐप बंद करने का बटन
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
tools:context=".MainActivity">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:onClick="closeApp"
android:text="Close App for Notification" />
</RelativeLayout>
चरण 3: MainActivity — onStop में सर्विस शुरू करें
package app.tutorialspoint.com.notifyme;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onStop() {
super.onStop();
// ऐप बैकग्राउंड/क्लोज होने पर सर्विस शुरू करें
startService(new Intent(this, NotificationService.class));
}
public void closeApp(View view) {
finish();
}
}
चरण 4: NotificationService — हर 5 सेकंड में नोटिफिकेशन
package app.tutorialspoint.com.notifyme;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import java.util.Timer;
import java.util.TimerTask;
public class NotificationService extends Service {
public static final String NOTIFICATION_CHANNEL_ID = "10001";
private final static String default_notification_channel_id = "default";
Timer timer;
TimerTask timerTask;
String TAG = "Timers";
int Your_X_SECS = 5;
@Override
public IBinder onBind(Intent arg0) { return null; }
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e(TAG, "onStartCommand");
super.onStartCommand(intent, flags, startId);
startTimer();
return START_STICKY;
}
@Override
public void onCreate() { Log.e(TAG, "onCreate"); }
@Override
public void onDestroy() {
Log.e(TAG, "onDestroy");
stopTimerTask();
super.onDestroy();
}
final Handler handler = new Handler();
public void startTimer() {
timer = new Timer();
initializeTimerTask();
timer.schedule(timerTask, 5000, Your_X_SECS * 1000);
}
public void stopTimerTask() {
if (timer != null) { timer.cancel(); timer = null; }
}
public void initializeTimerTask() {
timerTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() { createNotification(); }
});
}
};
}
private void createNotification() {
NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext(), default_notification_channel_id);
mBuilder.setContentTitle("My Notification");
mBuilder.setContentText("Notification Listener Service Example");
mBuilder.setTicker("Notification Listener Service Example");
mBuilder.setSmallIcon(R.drawable.ic_launcher_foreground);
mBuilder.setAutoCancel(true);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "NOTIFICATION_CHANNEL_NAME", importance);
mBuilder.setChannelId(NOTIFICATION_CHANNEL_ID);
assert mNotificationManager != null;
mNotificationManager.createNotificationChannel(notificationChannel);
}
assert mNotificationManager != null;
mNotificationManager.notify((int) System.currentTimeMillis(), mBuilder.build());
}
}
चरण 5: मैनिफेस्ट में सर्विस जोड़ें
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.tutorialspoint.com.notifyme">
<uses-permission android:name="android.permission.VIBRATE" />
<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/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".NotificationService"
android:label="@string/app_name">
<intent-filter>
<action android:name="app.tutorialspoint.com.notifyme.NotificationService" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
</application>
</manifest>
⚠️ आधुनिक विकल्प (बेहतर)
एंड्रॉइड 8+ में बैकग्राउंड सर्विस सीमित हैं। प्रोडक्शन ऐप्स के लिए:
- WorkManager — डिफर्ड, गारंटीड बैकग्राउंड वर्क
- Firebase Cloud Messaging (FCM) — सर्वर से पुश नोटिफिकेशन
- AlarmManager + BroadcastReceiver — सटीक समय पर वेकअप
- Foreground Service — नोटिफिकेशन के साथ दिखने वाली सर्विस (मीडिया प्लेयर, ट्रैकिंग के लिए)
यह उदाहरण सीखने के लिए ठीक है, लेकिन वास्तविक ऐप में WorkManager/FCM उपयोग करें।