Android
अधिसूचना चैनल Android O
खोज…
परिचय
अधिसूचना चैनल हमें ऐप डेवलपर्स को हमारी सूचनाओं को समूहों-चैनलों में समूहित करने में सक्षम करते हैं - उपयोगकर्ता जिसके पास एक बार में पूरे चैनल के लिए अधिसूचना सेटिंग्स को संशोधित करने की क्षमता है। Android O में यह सुविधा शुरू की गई है। अब यह उपलब्ध डेवलपर्स पूर्वावलोकन है।
वाक्य - विन्यास
- अधिसूचना अधिसूचना बनाने के लिए वर्ग अधिसूचना {} //
- createChannel () // अधिसूचना बनाने के लिए सामान्य विधि
पैरामीटर
तरीका | विवरण |
---|---|
IMPORTANCE_MAX | अप्रयुक्त |
महत्वपूर्ण: उच्च | हर जगह दिखाता है, शोर करता है और पेशाब करता है |
IMPORTANCE_DEFAULT | हर जगह दिखाता है, शोर करता है, लेकिन नेत्रहीन नहीं है |
IMPORTANCE_LOW | हर जगह दिखाता है, लेकिन घुसपैठ नहीं है |
IMPORTANCE_MIN | केवल छाया में दिखाता है, गुना के नीचे |
IMPORTANCE_NONE | बिना किसी महत्व के एक अधिसूचना; छाया में नहीं दिखा |
अधिसूचना चैनल
अधिसूचना चैनल क्या हैं?
अधिसूचना चैनल हमें एप्लिकेशन डेवलपर्स को एक साथ पूरे चैनल के लिए अधिसूचना सेटिंग्स को संशोधित करने की क्षमता रखने वाले उपयोगकर्ता के साथ समूह-चैनलों में हमारी सूचनाओं को समूह में सक्षम करते हैं। उदाहरण के लिए, प्रत्येक चैनल के लिए, उपयोगकर्ता सभी सूचनाओं को पूरी तरह से ब्लॉक कर सकते हैं, महत्व स्तर को ओवरराइड कर सकते हैं, या एक सूचना बैज दिखाने की अनुमति दे सकते हैं। यह नया फीचर किसी ऐप के उपयोगकर्ता अनुभव को बेहतर बनाने में मदद करता है।
अधिसूचना चैनल बनाएं
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.content.ContextWrapper;
import android.graphics.Color;
public class NotificationUtils extends ContextWrapper {
private NotificationManager mManager;
public static final String ANDROID_CHANNEL_ID = "com.sai.ANDROID";
public static final String IOS_CHANNEL_ID = "com.sai.IOS";
public static final String ANDROID_CHANNEL_NAME = "ANDROID CHANNEL";
public static final String IOS_CHANNEL_NAME = "IOS CHANNEL";
public NotificationUtils(Context base) {
super(base);
createChannels();
}
public void createChannels() {
// create android channel
NotificationChannel androidChannel = new NotificationChannel(ANDROID_CHANNEL_ID,
ANDROID_CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);
// Sets whether notifications posted to this channel should display notification lights
androidChannel.enableLights(true);
// Sets whether notification posted to this channel should vibrate.
androidChannel.enableVibration(true);
// Sets the notification light color for notifications posted to this channel
androidChannel.setLightColor(Color.BLUE);
// Sets whether notifications posted to this channel appear on the lockscreen or not
androidChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
getManager().createNotificationChannel(androidChannel);
// create ios channel
NotificationChannel iosChannel = new NotificationChannel(IOS_CHANNEL_ID,
IOS_CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
iosChannel.enableLights(true);
iosChannel.enableVibration(true);
iosChannel.setLightColor(Color.GRAY);
iosChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
getManager().createNotificationChannel(iosChannel);
}
private NotificationManager getManager() {
if (mManager == null) {
mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
}
return mManager;
}}
ऊपर दिए गए कोड में, हमने नोटिफ़िकेशनचैनल के दो उदाहरण बनाए हैं, जो एक चैनल नाम के साथ अद्वितीय है, और इसके निर्माता में एक महत्वपूर्ण स्तर भी है। प्रत्येक अधिसूचना चैनल के लिए, हमने निम्नलिखित विशेषताओं को लागू किया।
- ध्वनि
- दीपक
- कंपन
- लॉक स्क्रीन पर दिखाने के लिए अधिसूचना।
अंत में, हमने सिस्टम से NotificationManager प्राप्त किया और फिर चैनल createNotificationChannel () कॉल करके चैनल को पंजीकृत किया, जिस चैनल को हमने बनाया है।
हम NotificationChannel इंस्टेंसेस की जावा सूची को पास करते हुए createNotificationChannels () के साथ एक साथ कई अधिसूचना चैनल बना सकते हैं। आप getNotificationChannels () के साथ ऐप के लिए सभी अधिसूचना चैनल प्राप्त कर सकते हैं और getNotificationChannel () के साथ एक विशिष्ट चैनल प्राप्त कर सकते हैं, केवल तर्क के रूप में चैनल आईडी पास कर सकते हैं।
अधिसूचना चैनलों में महत्व स्तर
तरीका | विवरण |
---|---|
IMPORTANCE_MAX | अप्रयुक्त |
महत्वपूर्ण: उच्च | हर जगह दिखाता है, शोर करता है और पेशाब करता है |
IMPORTANCE_DEFAULT | हर जगह दिखाता है, शोर करता है, लेकिन नेत्रहीन नहीं है |
IMPORTANCE_LOW | हर जगह दिखाता है, लेकिन घुसपैठ नहीं है, मान 0 है |
IMPORTANCE_MIN | केवल छाया में दिखाता है, गुना के नीचे |
IMPORTANCE_NONE | बिना किसी महत्व के एक अधिसूचना; छाया में नहीं दिखा |
चैनल के लिए अधिसूचना और पोस्ट बनाएँ
हमने NotificationUtils का उपयोग करके एक और NotificationUtils का उपयोग करके दो सूचनाएँ बनाई हैं।
public Notification.Builder getAndroidChannelNotification(String title, String body) {
return new Notification.Builder(getApplicationContext(), ANDROID_CHANNEL_ID)
.setContentTitle(title)
.setContentText(body)
.setSmallIcon(android.R.drawable.stat_notify_more)
.setAutoCancel(true);
}
public Notification.Builder getIosChannelNotification(String title, String body) {
return new Notification.Builder(getApplicationContext(), IOS_CHANNEL_ID)
.setContentTitle(title)
.setContentText(body)
.setSmallIcon(android.R.drawable.stat_notify_more)
.setAutoCancel(true);
}
हम NotificationChannel को Notification.Builder () का उपयोग करके भी सेट कर सकते हैं। इसके लिए हम setChannel (String ChannelId) का उपयोग कर सकते हैं।
अपडेट नोटिफिकेशन चैनल सेटिंग्स
एक बार जब आप एक अधिसूचना चैनल बनाते हैं, तो उपयोगकर्ता इसकी सेटिंग्स और व्यवहार के प्रभारी होता है। आप किसी मौजूदा सूचना चैनल का नाम बदलने, या उसके विवरण को अपडेट करने के लिए createNotificationChannel () को फिर से कॉल कर सकते हैं। निम्न नमूना कोड बताता है कि आप किसी उपयोगकर्ता को किसी गतिविधि को शुरू करने का इरादा बनाकर अधिसूचना चैनल के लिए सेटिंग्स पर कैसे पुनर्निर्देशित कर सकते हैं। इस मामले में, इरादे को अधिसूचना चैनल की आईडी और आपके ऐप के पैकेज नाम सहित विस्तारित डेटा की आवश्यकता होती है।
@Override
protected void onCreate(Bundle savedInstanceState) {
//...
Button buttonAndroidNotifSettings = (Button) findViewById(R.id.btn_android_notif_settings);
buttonAndroidNotifSettings.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
i.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
i.putExtra(Settings.EXTRA_CHANNEL_ID, NotificationUtils.ANDROID_CHANNEL_ID);
startActivity(i);
}
});
}
XML फ़ाइल:
<!--...-->
<Button
android:id="@+id/btn_android_notif_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Notification Settings"/>
<!--...-->
अधिसूचना चैनल हटाना
आप deleteNotificationChannel () कॉल करके सूचना चैनल हटा सकते हैं।
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
NotificationChannel mChannel = mNotificationManager.getNotificationChannel(id);
mNotificationManager.deleteNotificationChannel(mChannel);
अब MainActivity और xml बनाएं
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_margin="16dp"
tools:context="com.chikeandroid.tutsplusalerts.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tuts+ Android Channel"
android:layout_gravity="center_horizontal"
android:textAppearance="@style/TextAppearance.AppCompat.Title"/>
<EditText
android:id="@+id/et_android_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Title"/>
<EditText
android:id="@+id/et_android_author"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Author"/>
<Button
android:id="@+id/btn_send_android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Send"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tuts+ IOS Channel"
android:layout_gravity="center_horizontal"
android:textAppearance="@style/TextAppearance.AppCompat.Title"/>
<EditText
android:id="@+id/et_ios_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Title"
/>
<EditText
android:id="@+id/et_ios_author"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Author"/>
<Button
android:id="@+id/btn_send_ios"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Send"/>
</LinearLayout>
</LinearLayout>
MainActivity.java
हम अपने MainActivity को संपादित करने जा रहे हैं ताकि हम EditText घटकों से शीर्षक और लेखक प्राप्त कर सकें और फिर इन्हें Android चैनल पर भेज सकें। हम अपने NotificationUtils में बनाए गए Android चैनल के लिए Notification.Bilder को प्राप्त करते हैं, और फिर NotificationManager को सूचित करते हैं।
आयात android.app.Notification; आयात android.os.Bundle; import android.support.v7.app.AppCompatActivity; आयात android.text.TextUtils; आयात android.view.View; आयात android.widget.Button; आयात android.widget.EditText;
public class MainActivity extends AppCompatActivity {
private NotificationUtils mNotificationUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNotificationUtils = new NotificationUtils(this);
final EditText editTextTitleAndroid = (EditText) findViewById(R.id.et_android_title);
final EditText editTextAuthorAndroid = (EditText) findViewById(R.id.et_android_author);
Button buttonAndroid = (Button) findViewById(R.id.btn_send_android);
buttonAndroid.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String title = editTextTitleAndroid.getText().toString();
String author = editTextAuthorAndroid.getText().toString();
if(!TextUtils.isEmpty(title) && !TextUtils.isEmpty(author)) {
Notification.Builder nb = mNotificationUtils.
getAndroidChannelNotification(title, "By " + author);
mNotificationUtils.getManager().notify(107, nb.build());
}
}
});
}
}