नोटिफिकेशन से एक्टिविटी में डेटा पास करना
जब यूजर नोटिफिकेशन पर टैप करता है, तो PendingIntent के जरिए एक्टिविटी शुरू होती है। उस इंटेंट में एक्स्ट्रा डालकर डेटा पास किया जा सकता है। एक्टिविटी में onNewIntent() ओवरराइड करके वह डेटा पढ़ें।
चरण 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"
tools:context=".MainActivity">
<TextView
android:id="@+id/tvNotify"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/btnNotify"
android:layout_margin="16dp" />
<Button
android:id="@+id/btnNotify"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_margin="16dp"
android:onClick="createNotification"
android:text="Create Notification" />
</RelativeLayout>
चरण 3: MainActivity — onNewIntent में डेटा पढ़ें
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.Bundle;
import android.support.v4.app.NotificationCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
public static final String NOTIFICATION_CHANNEL_ID = "10001";
private final static String default_notification_channel_id = "default";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
onNewIntent(getIntent()); // कोल्ड स्टार्ट के लिए
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Bundle extras = intent.getExtras();
if (extras != null && extras.containsKey("NotificationMessage")) {
String msg = extras.getString("NotificationMessage");
TextView tvNotify = findViewById(R.id.tvNotify);
tvNotify.setText(msg);
}
}
public void createNotification(View view) {
Intent notificationIntent = new Intent(MainActivity.this, MainActivity.class);
notificationIntent.putExtra("NotificationMessage", "I am from Notification");
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, 0);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(MainActivity.this, default_notification_channel_id)
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setContentTitle("Test")
.setContentText("Hello! This is my first push notification")
.setContentIntent(resultIntent);
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
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());
}
}
चरण 4: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.tutorialspoint.com.notifyme">
<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>
</application>
</manifest>
कुंजी बिंदु
- PendingIntent बनाते समय इंटेंट में
putExtra()से डेटा डालें - FLAG_ACTIVITY_SINGLE_TOP — मौजूदा इंस्टेंस को पुनः उपयोग करता है
- onNewIntent() ओवरराइड करें — वही इंस्टेंस होने पर यह कॉल होता है
- onCreate() में भी onNewIntent(getIntent()) कॉल करें — कोल्ड स्टार्ट के लिए
अलग-अलग एक्शन के लिए अलग डेटा
अगर नोटिफिकेशन में कई एक्शन बटन हैं, तो हर एक्शन के लिए अलग PendingIntent बनाएं जिसमें अलग requestCode और अलग एक्स्ट्रा हो:
Intent action1Intent = new Intent(this, MainActivity.class).putExtra("action", "reply");
PendingIntent action1Pending = PendingIntent.getActivity(this, 1, action1Intent, PendingIntent.FLAG_IMMUTABLE);
Intent action2Intent = new Intent(this, MainActivity.class).putExtra("action", "delete");
PendingIntent action2Pending = PendingIntent.getActivity(this, 2, action2Intent, PendingIntent.FLAG_IMMUTABLE);
ऐप चलाएं, नोटिफिकेशन बनाएं, उस पर टैप करें — टेक्स्ट व्यू में मैसेज दिखेगा।