Notification در اندروید

یک اعلان (notification) پیامی است که با هدف آگاه کردن کاربر از یک موضوع در خارج از صفحات برنامه نشان داده می شود. هنگامی که به سیستم می گوییم یک اعلان را صادر کند، ابتدا آن اعلان به صورت یک آیکون در ناحیه ی مخصوص آن ها که یک نوار باریک در بالای صفحه است و نوار وضعیت نام دارد ظاهر می شود و برای مشاهده ی جزئیات اعلان نیز کاربر می تواند صفحه ی نوار وضعیت را باز کند. هر دو قسمت نوار وضعیت و صفحه ی جزئیات آن ها توسط سیستم کنترل می شود و کاربر می تواند در هر زمان به آن ها دسترسی داشته باشد.
در این حالت استفاده از Notification بهترین راه ممکن برای برقراری ارتباط با کاربر هست . از کاربرد Notification ها در اندروید میشه به مواردی مثل Notification دادن برای پر شدن حافظه ، Update های جدید نرم افزار ، آمدن پیام جدید در نرم افزارهای پیام رسان مثل تلگرام و … دیگر موارد اشاره کرد .

 

همچنین می توانیم برای نشان دادن جزئیات بیشتر در اعلان ها از ویوهای بزرگ تری استفاده کنیم. اندازه ی یک اعلان به منظور نشان دادن جزئیات بیشتر می تواند به اندازه ی شش خط افزایش پیدا کند.
در نظر گرفتن طراحی
Notification ها به عنوان بخش مهمی از رابط کاربری Android  دستورالعمل های طراحی خود را دارند. طراحی در Android 5.0   (API 21) از اهمیت خاصی برخوردار هستند.

مدیریت notification channel
با شروع Android 8.0   (API 26) channel های Notification به شما امکان می دهد که یک اعلان قابل تنظیم مخصوص کاربر برای هر نوع Notification که می خواهید نمایش دهید ایجاد کنید. channel های Notification یک سیستم یکپارچه برای کمک به مدیریت اعلان ها را فراهم می کند.
شما می توانید یک نمونه از NotificationChannel را برای هر نوع متفاوتی از اعلان که نیاز دارید ارسال کنید ایجاد کنید.
کاربران می توانند اکثر تنظیمات مربوط به اعلان ها را با استفاده از UI سیستم سازگار مدیریت کنند.
همه اعلانهای ارسال شده در همان کانال Notification ، رفتار مشابهی دارند.

ویژگی های notification عبارتند از :

    Importance

    Sound

    Lights

    Vibration

    Show on lockscreen

    Override do not disturb

ایجاد notification channel
با دنبال کردن مراحل زیر می توانید به سادگی برای برنامه ی خود یک اعلان بسازید :
1 - ایجاد سازنده ی اعلان
2 - تعیین ویژگی های اعلان
3 - افزودن عملیات به اعلان

 

NotificationManager mNotificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
// The user-visible name of the channel.
CharSequence name = getString(R.string.channel_name);
// The user-visible description of the channel.
String description = getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel mChannel = new NotificationChannel(id, name, importance);
// Configure the notification channel.
mChannel.setDescription(description);
mChannel.enableLights(true);
// Sets the notification light color for notifications posted to this
// channel, if the device supports this feature.
mChannel.setLightColor(Color.RED);
mChannel.enableVibration(true);
mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
mNotificationManager.createNotificationChannel(mChannel);

 


ایجاد notification channel group
اگر برنامه شما multiple user accounts می باشد، میتوانید یک گروه کانال اعلان برای هر حساب ایجاد کنید. گروه های کانال اعلان ها به شما این امکان را می دهند که چندین کانال اعلان با نام های یکسان در یک برنامه واحد مدیریت کنید. به عنوان مثال، یک برنامه شبکه اجتماعی ممکن است شامل پشتیبانی از حسابهای کاربری شخصی و تجاری باشد. در این سناریو، هر حساب کاربری ممکن است چندین کانال اعلان با عملکردها و اسامی یکسان داشته باشد.
سازماندهی کانال های notification  مربوط به هر حساب کاربری در این مثال به گروه های اختصاصی تضمین می دهد که کاربران به راحتی می توانند بین آنها در تنظیمات متمایز شوند. هر گروه کانال notification  نیاز به شناسه ای دارد که باید در داخل package خود منحصر به فرد باشد و همچنین یک نام کاربری قابل مشاهده باشد. قطعه کد زیر نشان می دهد که چگونه یک گروه کانال اعلان ایجاد کنید.

// The id of the group.
String group = "my_group_01";
// The user-visible name of the group.
CharSequence name = getString(R.string.group_name);
NotificationManager mNotificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.createNotificationChannelGroup(new NotificationChannelGroup(group, name));

پس از ایجاد یک گروه جدید، می توانید از setGroup () برای مرتبط کردن یک کانال جدید با گروه استفاده کنید. قبل از ارسال کانال به مدیر notification ، می توانید ارتباط بین کانال های notification و گروه ها را تغییر دهید

خواندن تنظیمات کانال notification
کاربران می توانند تنظیمات کانال های notification  را تغییر دهند، از جمله رفتارهایی مانند vibration و صدای هشدار. شما می توانید با استفاده از دو متد  زیر برای تنظیماتی که کاربر به یک کانال اعلان اعمال کرده است استفاده کنید:
1 - برای بازیابی کانال تک notification ، می توانید متد   () NotificationChannel   را صدا بزنید.
2 - برای بازیابی تمام کانال های notification متعلق به برنامه شما، می توانید ()getNotification  را  صدا بزنید.
بعد از NotificationChannel  شما می توانید متد هایی مانند getVibrationPattern () و getSound () برای پیدا کردن تنظیمات فعلی کاربر استفاده کنید. برای پیدا کردن اینکه آیا یک کاربر یک کانال اعلان را مسدود کرده است، می توانید متدgetImportance ()  را صدا بزنید. اگر کانال notification مسدود شده باشد، getImportance () , IMPORTANCE_NONE را بازمی گرداند.
به روز رسانی تنظیمات کانال notification
پس از ایجاد یک کانال notification ، کاربر مسئول تنظیمات و رفتار آن است. شما می توانید متد createNotificationChannel ()  را صدا بزنید و سپس کانال notification را دوباره به notification manager ارسال کنید تا کانال notification موجود را تغییر دهید یا توضیحات خود را به روزرسانی کند.
نمونه کد زیر نحوه هدایت کاربر به تنظیمات یک کانال notification را با ایجاد یک Intent برای شروع یک اکتیویتی توصیف می کند.
Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_CHANNEL_ID, mChannel.getId());
intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
startActivity(intent);

حذف کانال notification
شما می توانید کانال های اطلاع رسانی را با متد deleteNotificationChannel ()  حذف کنید:
NotificationManager mNotificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
mNotificationManager.deleteNotificationChannel(id);

ایجاد یک notification
به عنوان اولین گام در ایجاد سازنده ی اعلان باید از متد ()NotificationCompat.Builder.build استفاده کنیم. همچنین برای تعیین ویژگی های مختلف اعلان نظیر آیکون های کوچک و بزرگ، عنوان، اولویت و غیره نیز از این تابع سازنده استفاده خواهیم کرد.
(NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this
با استفاده از تابع سازنده می توانیم ویژگی هایی که نیاز داریم را برای اعلان تعیین کنیم. با این وجود تعیین ویژگی های زیر برای اعلان ضروری است:

()setSmallIcon    تعیین یک آیکون کوچک با استفاده از متد

()setContentTitle    تعیین عنوان با استفاده از متد

()setContentText    تعیین جزئیات متنی با استفاده از متد

Notification actions
یک actions که اجازه می دهد تا کاربران به طور مستقیم از اعلان وارد یک Activity در برنامه شما شود.
Notification  میتواند اقدامات متعددی را انجام دهد. اطمینان حاصل کنید که همیشه عمل (actions) را تعیین می کنید که باعث می شود که کاربر Notification  را کلیک کند. معمولا این عمل یک Activity را در برنامه شما باز می کند. شما همچنین می توانید دکمه ها را به Notification  اضافه کنید .
در داخل Notification ، این عمل PendingIntent حاوی یک Intent  می باشد که Activity در برنامه شما را شروع می کند. برای استفاده از  PendingIntent از متد  NotificationCompat.Builder استفاده کنید.

اولویت Notification  و اهمیت ها
اگر مایل هستید، می توانید اولویت یک Notification  را در Android 7.1 (سطح API 25) و پایین تر تنظیم کنید. اولویت به عنوان یک اشاره به UI دستگاه در مورد نحوه نمایش عمل می کند. برای تنظیم اولویت از طریق () NotificationCompat.Builder.setPriority  استفاده کنید.
 سطوح اولویت اعم از
1 - PRIORITY_MIN
2 - PRIORITY_MAX
3 - PRIORITY_DEFAULT
اندروید 8.0 (سطح API 26) توانایی تنظیم سطوح اولویت اطلاعیه های فردی را کاهش می دهد. در عوض، هنگام ایجاد یک کانال Notification  می توانید سطح اهمیت توصیه شده را تنظیم کنید. سطح اهمیتی که به کانال اعلان اختصاص میدهید، به همه پیامهای اعلان که به آن ارسال میکنید، اعمال میشود.

ایجاد یک اعلان (Notification  ) ساده
به یاد داشته باشید که اندروید 8.0 (سطح API 26) و بالاتر نیاز به ارسال Notification  ها به یک کانال Notification  دارد.
قطعه کد زیر نشان دهنده اعلان ساده ای است که یک فعالیت را برای باز کردن زمانی که کاربر روی اعلان کلیک می کند مشخص می کند. توجه داشته باشید که این کد یک شیء TaskStackBuilder ایجاد می کند و از آن برای ایجاد PendingIntent برای عمل استفاده می کند:

// The id of the channel.
String CHANNEL_ID = "my_channel_01";
NotificationCompat.Builder mBuilder =
       
new NotificationCompat.Builder(this, CHANNEL_ID)
           
.setSmallIcon(R.drawable.notification_icon)
           
.setContentTitle("My notification")
           
.setContentText("Hello World!");
// Creates an explicit intent for an Activity in your app
Intent resultIntent = new Intent(this, ResultActivity.class);

// The stack builder object will contain an artificial back stack for the
// started Activity.
// This ensures that navigating backward from the Activity leads out of
// your app to the Home screen.
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
// Adds the back stack for the Intent (but not the Intent itself)
stackBuilder
.addParentStack(ResultActivity.class);
// Adds the Intent that starts the Activity to the top of the stack
stackBuilder
.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
        stackBuilder
.getPendingIntent(
           
0,
           
PendingIntent.FLAG_UPDATE_CURRENT
       
);
mBuilder
.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
   
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

// mNotificationId is a unique integer your app uses to identify the
// notification. For example, to cancel the notification, you can pass its ID
// number to NotificationManager.cancel().
mNotificationManager
.notify(mNotificationId, mBuilder.build());

 

اعمال یک layout به یک Notification  
برای اینکه یک اعلان در یک layout نمایش داده شود، ابتدا یک شی NotificationCompat.Builder به صورت معمولی که می خواهید ایجاد کنید. بعد از متد ()Builder.setStyle  استفاده کنید.
به عنوان مثال، قطعه کد زیر نشان می دهد که چگونه برای تغییر اعلان ایجاد شده در قطعه قبلی، از layout استفاده می کند:
NotificationCompat.Builder mBuilder =
        new NotificationCompat.Builder(this, CHANNEL_ID)
            .setSmallIcon(R.drawable.notification_icon)
            .setContentTitle("Event tracker")
            .setContentText("Events received");
NotificationCompat.InboxStyle inboxStyle =
        new NotificationCompat.InboxStyle();
String[] events = new String[6];
// Sets a title for the Inbox in expanded layout
inboxStyle.setBigContentTitle("Event tracker details:");
...
// Moves events into the expanded layout
for (int i=0; i < events.length; i++) {
    inboxStyle.addLine(events[i]);
}
// Moves the expanded layout object into the notification object.
mBuilder.setStyle(inboxStyle);
...
// Issue the notification here.


Handling compatibility
همه ویژگی های اعلان برای یک نسخه خاص در دسترس نیستند، هرچند متدهایی هایی برای تنظیم آنها در کلاس Library Support KnowledgeCompat.Builder وجود دارد. به عنوان مثال، برخی از موارد، فقط در اندروید 4.1 و بالاتر ظاهر می شود، زیرا اعلان های گسترش یافته خود تنها در اندروید 4.1 و بالاتر در دسترس هستند.
برای اطمینان از این کار، Notification  ها را با NotificationCompat و زیر کلاس های آن، به خصوص NotificationCompat.Builder ایجاد کنید. علاوه بر این، هنگام اجرای یک Notification  ، این روند را دنبال کنید:
1 - تمامی قابلیت های اعلان را برای همه کاربران، صرف نظر از نسخه ای که استفاده می کنید، قرار دهید. برای انجام این کار، تأیید کنید که تمام قابلیت ها از یک Activity در برنامه شما در دسترس است. برای انجام این کار می توانید Activity جدیدی را اضافه کنید. برای مثال، اگر شما میخواهید از متد () addAction  برای متوقف کردن یک کنترل استفاده کنید، ابتدا این کنترل را در یک فعالیت در برنامه خود قرار دهید.
2 – شروع یک اکتیویتی وقتی که کاربر روی Notification   کلیک می کند.
3 - حالا ویژگی های یکNotification   را که می خواهید از آن استفاده کنید اضافه کنید. به خاطر داشته باشید که هر عملکردی که شما اضافه می کنید باید در Activity موجود باشد که وقتی که کاربران روی Notification   کلیک می کنند، در دسترس باشند.

مدیریت اعلانها
هنگامی که شما نیاز به نمایش چندین Notification   برای یک نوع رویداد دارید، باید از ایجاد یک Notification   جدید جلوگیری کنید ولی باید Notification   را بروز رسانی کنید مثلا نمایش تعداد آنها به جای نمایش همه.

به روز رسانی اعلان ها
برای این کار می توانید از () NotificationManager.notify  استفاده کنید.
برای به روز رسانی Notification   شما می توانید از NotificationCompat.Builder از شئی Notification استفاده کنید
اگر Notification   قبلی هنوز قابل مشاهده باشد، سیستم آن را با استفاده از شی Notification اطلاع می دهد
mNotificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// Sets an ID for the notification, so it can be updated
int notifyID = 1;
mNotifyBuilder = new NotificationCompat.Builder(this, CHANNEL_ID)
    .setContentTitle("New Message")
    .setContentText("You've received new messages.")
    .setSmallIcon(R.drawable.ic_notify_status);
numMessages = 0;
// Start of a loop that processes data and then notifies the user
...
    mNotifyBuilder.setContentText(currentText)
        .setNumber(++numMessages);
    // Because the ID remains unchanged, the existing notification is
    // updated.
    mNotificationManager.notify(
            notifyID,
            mNotifyBuilder.build());
...
حذف اعلانها
اعلان ها تا زمانی که یکی از موارد زیر اتفاق می افتد قابل مشاهده است:
1 - کاربر اخطار را به صورت جداگانه یا با استفاده از «پاک کردن همه» (اگر اعلان میتواند پاک شود) را پاک می کند.
2 - کاربر اعلان را کلیک می کند و متد  ()setAutoCancel  فراخوانی میشود.
3 – شما میتوانید برای یک اعلان خاص از متد () cancel استفاده کنید.
4 – با استفاده از متد  () callcelall  تمام اعلانهایی که قبلا صادر کرده اید را حذف میکنید.
5 – اگر برای زمان ایجاد یک اعلان از () setTimeoutAfter  استفاده می کنید، سیستم پس از مدت زمان تعیین شده، اعلان را لغو می کند.


Notification badges (نشانه ها)
اندروید 8.0 (API 26) قابلیت نمایش نمادهای اعلان در آیکون های برنامه را در برنامه های پشتیبانی شده ارائه می دهد. هشدارها نشانهای اعلان مربوط به یک یا چند کانال اعلان در یک برنامه را نشان میدهد که کاربر آن را رد کرده یا در آن فعالیت نکرده است.

کاربران همچنین می توانند آیکون یک برنامه به مدت طولانی نگه داشته و اطلاعیه های مرتبط با یک نشانۀ اعلان در برنامه های پشتیبانی شده نگاه کنند. پس از آن کاربران می توانند اخطارها را از منوی نمایش داده شده به نحوی مشابه به notification drawer می باشد.

 


نکته: هر اعلان را نشان ندهید، زیرا مواردی وجود دارد که نشان ها حساس نیستند.مانند
Ongoing notifications
اکثر اعلان های جاری مانند پردازش تصویر، کنترل های پخش رسانه ای یا دستورالعمل های هدایت فعلی، به عنوان نشان شناخته نمی شوند.
Calendaring apps
اجتناب از وقایع ای که در زمان کنونی اتفاق می افتد.
Clock or alarm apps
اجتناب از اعلان های مربوط به هشدارهای فعلی

تنظیم notification badges
شما می توانید از روش () setShowBadge  برای جلوگیری از حضور اعلان ها از یک کانال که توسط نشان نشان داده می شود استفاده کنید. شما نمیتوانید این تنظیم را برای یک کانال اعلان پس از ایجاد و ارسال به مدیر اطلاع رسانی به صورت programmatically انجام دهید.
کد نمونه زیر نشان می دهد که چگونه notification badges ها را در ارتباط با notification  ها از یک کانال اعلان پنهان کنید:
NotificationManager mNotificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The ID of the channel.
String id = "my_channel_01";
// The user visible name of the channel.
CharSequence name = getString(R.string.channel_name);
// The user visible description of the channel.
String description = getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_LOW;
NotificationChannel mChannel = new NotificationChannel(id, name, importance);
// Configure the notification channel.
mChannel.setDescription(description);
mChannel.setShowBadge(false);
mNotificationManager.createNotificationChannel(mChannel);
شما می توانید با استفاده از متد () setNumber  برای تنظیم یک عدد سفارشی برای نشان دادن در long-press menu استفاده کنید
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
int notificationID = 1;
String CHANNEL_ID = "my_channel_01";
// Set a message count to associate with this notification in the long-press menu.
int messageCount = 3;
// Create a notification and set a number to associate with it.
NotificationCompat notification =
        new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
            .setContentTitle("New Messages")
            .setContentText("You've received 3 new messages.")
            .setSmallIcon(R.drawable.ic_notify_status)
            .setNumber(messageCount)
            .build();
// Issue the notification.
mNotificationManager.notify(notificationID, notification);

Replying to notifications
با شروع در Android 7.0 (API 24)، کاربران می توانند به طور مستقیم به پیام های متنی را پاسخ دهند یا لیست های کار را از طریق گفت و گو اعلان بارگذاری کنند.

 


Adding inline reply actions
برای ایجاد یک  notification action که از direct reply پشتیبانی می کند:
1 - یک نمونه از RemoteInput.Builder ایجاد کنید که می توانید به notification  خود اضافه کنید. سازنده این کلاس یک رشته را می پذیرد که سیستم به عنوان کلید برای ورود متن استفاده می کند
// Key for the string that's delivered in the action's intent.
private static final String KEY_TEXT_REPLY = "key_text_reply";
String replyLabel = getResources().getString(R.string.reply_label);
RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
        .setLabel(replyLabel)
        .build();

2 - ایجاد یک PendingIntent برای پاسخ
// Build a PendingIntent for the reply action to trigger.
PendingIntent replyPendingIntent =
        PendingIntent.getBroadcast(getApplicationContext(),
                conversation.getConversationId(),
                getMessageReplyIntent(conversation.getConversationId()),
                PendingIntent.FLAG_UPDATE_CURRENT);
3 - attach کردن شی RemoteInput به یک عمل با استفاده از () addRemoteInput
// Create the reply action and add the remote input.
Notification.Action action =
        new Notification.Action.Builder(R.drawable.ic_reply_icon,
                getString(R.string.label), replyPendingIntent)
                .addRemoteInput(remoteInput)
                .build();

4 - action  را به یک notification  اعمال کنید و notification را ارسال کنید.
// Build the notification and add the action.
Notification newMessageNotification =
        new Notification.Builder(mContext, CHANNEL_ID)
            .setSmallIcon(R.drawable.ic_message)
            .setContentTitle(getString(R.string.title))
            .setContentText(getString(R.string.content))
            .addAction(action))
            .build();

// Issue the notification.
NotificationManager notificationManager =
        NotificationManager.from(mContext);
notificationManager.notify(notificationId, newMessageNotification);

 

دريافت ورودي کاربر از inline reply

1 - صدا زدن () getResultsFromIntent که یک notification action's intent را به عنوان پارامتر ارسال می کند. این روش از Bundle استفاده می کند که حاوی پاسخ متنی است.

Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);

2 – شما می توانید این فرایند را تکمیل کنید و متن ورودی را با ایجاد یک متد، همانطور که در کد زیر شرح داده شده است، بازیابی کنید:

// Obtain the intent that started this activity by calling
// Activity.getIntent() and pass it into this method to
// get the associated string.

private CharSequence getMessageText(Intent intent) {
   
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
   
if (remoteInput != null) {
       
return remoteInput.getCharSequence(KEY_TEXT_REPLY);
   
}
   
return null;
 
}

3 - ساخت یک notification دیگر، با استفاده از همان شناسه که در notification قبلی استفاده شده است، هنگام کار با این اعلان جدید، از context ای که به متد () recereer's onReceive منتقل می شود، استفاده کنید.

// Build a new notification, which informs the user that the system
// handled their interaction with the previous notification.
Notification repliedNotification =
       
new Notification.Builder(context, CHANNEL_ID)
           
.setSmallIcon(R.drawable.ic_message)
           
.setContentText(getString(R.string.replied))
           
.build();

// Issue the new notification.
NotificationManager notificationManager =
       
NotificationManager.from(context);
notificationManager
.notify(notificationId, repliedNotification);

برای برنامه های تعاملی مانند چت، می توانید هنگام نوشتن متن بازیابی، زمینه اضافی را وارد کنید. به عنوان مثال، این برنامه ها می توانند چند خط سابقه گپ را نشان دهند. وقتی کاربر از طریق RemoteInput پاسخ می دهد، می توانید تاریخچه پاسخ را با استفاده از متد ()setRemoteInputHistory به روز کنید.

بعد از اینکه برنامه ورودی از راه دور دریافت کرده است، اعلان باید به روز شود یا لغو شود. هنگامی که کاربر با استفاده از پاسخ مستقیم به یک به روز رسانی از راه دور پاسخ می دهد، اعلان را لغو نمی کند. در عوض، اطلاع رسانی را برای نمایش پاسخ کاربر به روز می کند. برای اطلاعیه ها با استفاده از MessagingStyle، شما باید آنرا به عنوان آخرین پیام اضافه کنید. هنگام استفاده از دیگر قالب ها، می توانید پاسخ کاربر را به تاریخ ورودی از راه دور اضافه کنید.

Bundling notifications

با شروع Android 7.0 (سطح API 24) اندروید به برنامه نویسان این امکان را می دهد که بتوانند یک صف از اعلان ها را فراهم کنند. این شبیه به ویژگی های هشدار از طریق Stack ها در Android Wear است. به عنوان مثال، اگر برنامه شما اعلان های دریافت شده را دریافت می کند، هنگامی که بیش از یک پیام دریافت می شود،می توانید اعلان ها را به عنوان یک گروه واحد دسته بندی کنید.

یک گروه اطلاع رسانی یک سلسله مراتب را بر روی اعلان های مربوط به آن اعمال می کند. در بالای آن سلسله مراتب اطلاع رسانی والدین است که اطلاعات خلاصه ای را برای گروه نشان می دهد. کاربر می تواند به طور متوالی گروه اطلاع رسانی را گسترش دهد و سیستم اطلاعات بیشتری را به عنوان تمرین کاربر عمیق تر نشان می دهد.

توجه: هشدار برای یک گروه اطلاع رسانی باید با یک اعلان متفاوت انجام شود،

برای این کار باید() Builder.setGroupAlertBehavior را صدا بزنید.

بهترین روش برای Bundling notifications
این بخش دستورالعمل هایی را درباره زمان استفاده از اعلان ها به جای اطلاعیه های InboxStyle موجود در نسخه 6.0 و نسخه های قبلی ارائه می دهد.

 مواقع استفاده از bundled notifications
1 - اعلان های کودک (child notifications) اطلاعیه های کامل هستند و می توانند بدون نیاز به خلاصه گروه نمایش داده شوند.
2 - مزایای استفاده از اطلاعیه های کودک (child notifications) به صورت جداگانه ای است. مثلا:
-    اقدامات خاصی را برای هر child  انجام می دهند.
-    اطلاعات  بیشتری برای child  وجود دارد که کاربر آنها را می خواند.


نمایش bundled notifications
برنامه همیشه باید یک خلاصه گروه ارسال کند، حتی اگر گروه فقط یک فرزند (child) داشته باشد. سیستم خلاصه را خنثی می کند و مستقیما child notifications را نمایش می دهد، در صورتی که تنها حاوی یک اعلان واحد باشد.

Peeking notifications
در حالی که سیستم معمولا اعلامیه های کودک (child notification) را به عنوان یک گروه نشان می دهد، می توانید آنها را به صورت موقت نمایش دهید. این ویژگی زمانی  مفید است که بخواهیم  اجازه دسترسی فوری به جدیدترین child  و اقدامات مرتبط با آن را بدهیم.

راه اندازی یک فعالیت منظم PendingIntent
برای راه اندازی یک PendingIntent که  Activity را شروع می کند، این مراحل را دنبال کنید:
1 - سلسله مراتب  Activity  برنامه خود را در مانیفست تعریف کنید.

<activity
    android:name=".MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity
    android:name=".ResultActivity"
    android:parentActivityName=".MainActivity">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainActivity"/>
</activity>

2 - یک back stack بر اساس Intent ایجاد کنید که فعالیت را شروع می کند:
...
Intent resultIntent = new Intent(this, ResultActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
// Adds the back stack
stackBuilder.addParentStack(ResultActivity.class);
// Adds the Intent to the top of the stack
stackBuilder.addNextIntent(resultIntent);
// Gets a PendingIntent containing the entire back stack
PendingIntent resultPendingIntent =
        stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
...
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(id, builder.build());


راه اندازی یک فعالیت خاص PendingIntent
بخش زیر نحوه تنظیم یک فعالیت خاص PendingIntent را توضیح می دهد.


1 - در مانیفست خود ویژگی های زیر را به  تگ <activity> برای activity خود اضافه کنید
android:name="activityclass"
The activity's fully-qualified class name.
android:taskAffinity=""
android:excludeFromRecents="true"

<activity
    android:name=".ResultActivity"
...
    android:launchMode="singleTask"
    android:taskAffinity=""
    android:excludeFromRecents="true">
</activity>
...


2 - ایجاد یک Intent که فعالیت را شروع می کند.
// Instantiate a Builder object.
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
// Creates an Intent for the Activity
Intent notifyIntent =
        new Intent(this, ResultActivity.class);
// Sets the Activity to start in a new, empty task
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                        | Intent.FLAG_ACTIVITY_CLEAR_TASK);
// Creates the PendingIntent
PendingIntent notifyPendingIntent =
        PendingIntent.getActivity(
        this,
        0,
        notifyIntent,
        PendingIntent.FLAG_UPDATE_CURRENT
);

// Puts the PendingIntent into the notification builder
builder.setContentIntent(notifyPendingIntent);
// Notifications are issued by sending them to the
// NotificationManager system service.
NotificationManager mNotificationManager =
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// Builds an anonymous Notification object from the builder, and
// passes it to the NotificationManager
mNotificationManager.notify(id, builder.build());


نمایش progress در یک اعلان
اعلان ها می توانند شامل animated progress باشند که وضعیت که وضعیت کاربران را نشان می دهد.
اگر شما می توانید هر زمان که عملیات طول می کشد و چه مقدار از آن را در هر زمان انجام شده است، تخمین زده شده باشد از (progress bar) استفاده کنید.

Displaying a fixed-duration progress indicator
برای نمایش یک progress bar اضافه کردن نوار به notification خود را از متد
(setProgress(max, progress, false استفاده کنید.
...
mNotifyManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mBuilder = new NotificationCompat.Builder(this, CHANNEL_ID);
mBuilder.setContentTitle("Picture Download")
    .setContentText("Download in progress")
    .setSmallIcon(R.drawable.ic_notification);
// Start a lengthy operation in a background thread
new Thread(
    new Runnable() {
        @Override
        public void run() {
            int incr;
            // Do the "lengthy" operation 20 times
            for (incr = 0; incr <= 100; incr+=5) {
                    // Sets the progress indicator to a max value, the
                    // current completion percentage, and "determinate"
                    // state
                    mBuilder.setProgress(100, incr, false);
                    // Displays the progress bar for the first time.
                    mNotifyManager.notify(0, mBuilder.build());
                        // Sleeps the thread, simulating an operation
                        // that takes time
                        try {
                            // Sleep for 5 seconds
                            Thread.sleep(5*1000);
                        } catch (InterruptedException e) {
                            Log.d(TAG, "sleep failure");
                        }
            }
            // When the loop is finished, updates the notification
            mBuilder.setContentText("Download complete")
            // Removes the progress bar
                    .setProgress(0,0,false);
            mNotifyManager.notify(ID, mBuilder.build());
        }
    }
// Starts the thread by calling the run() method in its Runnable
).start();


Displaying a continuing activity indicator
برای نشان دادن activity indicator (setProgress(0, 0, true را به اعلان خود اضافه کنید (دو پاراگراف اول نادیده گرفته می شوند) و اعلان را بفرستید.

// Sets the progress indicator to a max value, the current completion
// percentage, and "determinate" state
mBuilder.setProgress(100, incr, false);
// Issues the notification
mNotifyManager.notify(0, mBuilder.build());
Replace the lines you've found with the following lines:
// Sets an activity indicator for an operation of indeterminate length
mBuilder.setProgress(0, 0, true);
// Issues the notification
mNotifyManager.notify(0, mBuilder.build());

Notification metadata (ابرداده)
در دستگاههای دارای Android 8.0 (API سطح 26) و بالاتر، ممکن است اعلانها براساس metadata که شما هنگام ایجاد یک NotificationChannel تعیین می کنند مرتب شوند. به یاد داشته باشید که کاربر می تواند از تنظیمات بازدید کند یا مدت زیادی یک اعلان برای تغییر ابرداده ها را فشار داده و یا حتی کانال اعلان را در هر زمان مسدود کند.
در دستگاه های دارای Android 7.1 (سطح API 25) و پایین تر، Notification ها ممکن است براساس metadata مرتب شده باشند که شما با روش های NotificationCompat.Builder زیر تعیین می کنید:
1 - ()setCategory : هنگامی که دستگاه در حالت اولویت قرار دارد، سیستم چگونه می تواند اعلان های برنامه شما را اداره کند. مثلا اگر اعلان شما یک تماس ورودی، پیام فوری یا زنگ هشدار را نشان می دهد
2 - ()setPriority : اگر Notification دارای صدا یا لرزش باشد، اعلان ها را با فیلد اولویتی که به PRIORITY_MAX یا PRIORITY_HIGH تنظیم شده است، در یک پنجره کوچک شناور نشان می دهد.
3 - ()addPerson : به شما اجازه می دهد لیستی از افراد را به یک اعلان اضافه کنید.

Heads-up notifications
وقتی دستگاه فعال است (یعنی دستگاه قفل شده و صفحه نمایش آن روشن است) با استفاده از Android 5.0 (سطح API 21)، در یک پنجره کوچک شناور نشان داده می شود. این اعلان ها به شکل فشرده اعلان شما شبیه هستند، به جز اینکه اعلان سرآمد نیز دکمه های عمل را نشان می دهد. کاربران می توانند بدون اطلاع از برنامه فعلی اقدام به ارسال یا اخطار کنند.

Lock screen notifications
با انتشار آندروید 5.0 (سطح API 21)، اکنون ممکن است اعلان ها در صفحه قفل ظاهر شوند. برنامه شما می تواند این قابلیت را برای ارائه کنترل پخش رسانه ای و سایر اقدامات معمول استفاده کند. کاربران می توانند از طریق تنظیمات انتخاب کنند که آیا برای نمایش اعلان ها در صفحه قفل نمایش داده شود و شما می توانید تعیین کنید که آیا اعلان از برنامه شما در صفحه قفل قابل مشاهده است یا خیر.

Setting visibility
برنامه شما می تواند سطح جزئیات قابل مشاهده در اعلان های نمایش داده شده در یک صفحه قفل امن را کنترل کند. شما () setVisibility  را صدا بزنید و یکی از مقادیر زیر را مشخص کنید:
1 - VISIBILITY_PUBLIC محتوای کامل notifications را نشان می دهد.
2 - VISIBILITY_SECRET هیچ بخش از این notifications در صفحه قفل را نشان نمی دهد.
3 - VISIBILITY_PRIVATE اطلاعات پایه، مانند آیکون اطلاع رسانی و عنوان محتوا را نشان می دهد، اما محتوای کامل اطلاع رسانی را پنهان می کند.

Controlling media playback on the lock screen
در Android 5.0 (سطح API 21) صفحه قفل دیگر کنترل های رسانه ای را بر اساس RemoteControlClient نمایش نمی دهد،که اکنون از بین رفته است در عوض، از فرم NotificationCompat.MediaStyle با متد  () addAction  استفاده کنید که عملکردهای آن را به آیکون های قابل کلیک تبدیل می کند.
برای نمایش کنترل پخش رسانه در صفحه قفل در Android 5.0، دید به VISIBILITY_PUBLIC را تنظیم کنید، همانطور که در بالا توضیح داده شد. سپس اقدامات را اضافه کنید و قالب NotificationCompat.MediaStyle را تنظیم کنید، همانطور که در کد نمونه زیر توضیح داده شده است:
Notification notification =
        new NotificationCompat.Builder(context, CHANNEL_ID)
            // Show controls on lock screen even when user hides sensitive content.
            .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
            .setSmallIcon(R.drawable.ic_stat_player)
            // Add media control buttons that invoke intents in your media service
            .addAction(R.drawable.ic_prev, "Previous", prevPendingIntent) // #0
            .addAction(R.drawable.ic_pause, "Pause", pausePendingIntent)  // #1
            .addAction(R.drawable.ic_next, "Next", nextPendingIntent)     // #2
            // Apply the media style template
            .setStyle(new MediaStyle()
            .setShowActionsInCompactView(1 /* #1: pause button */)
            .setMediaSession(mMediaSession.getSessionToken()))
            .setContentTitle("Wonderful music")
            .setContentText("My Awesome Band")
            .setLargeIcon(albumArtBitmap)
            .build();


Custom notification layouts
notifications framework ها اجازه می دهد تا شما یک طرح اطلاع رسانی سفارشی تعریف کنید، که ظاهر اعلان را در یک شی RemoteViews تعریف می کند. اعلان های طرح سفارشی شبیه به اعلان های معمولی هستند، اما آنها بر اساس RemoteView ها در یک فایل طرح بندی XML تعریف شده است.
برای تعریف notification layout  سفارشی، ابتدا با ایجاد یک شیء RemoteViews که یک فایل طرح بندی XML ، شروع کنید. سپس، به جای فراخوانی متدهای مانند setContentTitle ()،() call setContent  را فراخوانی کنید. برای تنظیم جزئیات محتوا در آگاه شدن از طریق سفارشی، از روش های RemoteViews برای تنظیم مقادیر کودکان مشاهده استفاده کنید:
1 - یک طرح XML برای اعلان در یک فایل جداگانه ایجاد کنید. شما می توانید از هر نام فایل ای که می خواهید استفاده کنید، اما شما باید از فرمت xml استفاده کنید
2 - در برنامه خود، از روش RemoteViews برای تعریف آیکون های اطلاع رسانی و متن خود استفاده کنید.

با استفاده از style resources برای متن notification  سفارشی
همیشه از منابع سبک برای متن اطلاعیه سفارشی استفاده کنید. رنگ پسزمینه اعلان میتواند در دستگاهها و نسخههای مختلف متفاوت باشد، و با استفاده از منابع سبک به شما کمک میکند تا برای آن حساب کنید. با شروع از Android 2.3، سیستم یک سبک برای متن طرح آگهی استاندارد را تعریف کرد. اگر از همان سبک در برنامه هایی که اندروید 2.3 یا بالاتر را هدف قرار می دهند، اطمینان حاصل کنید که متن شما در برابر پس زمینه نمایش داده می شود.

Background colors
با شروع از Android 8.0 (سطح API 26)، می توانید رنگ پس زمینه را برای اطلاع رسانی تنظیم کنید و فعال کنید. شما فقط باید از این ویژگی در اعلانها برای وظایف جاری استفاده کنید که برای یک کاربر مهم است که از یک نگاه مهم باشد.

Custom views
از Android 7.0 (سطح API 24)، شما می توانید نمایش های اعلانات را سفارشی کنید و همچنان دکوراسیون های سیستم مانند سرصفحه های اطلاع رسانی، اقدامات و پوسته های قابل ارتقا را دریافت کنید.
برای فعال کردن این قابلیت، آندروید API های زیر را برای نمایش نمایه سفارشی شما فراهم می کند:
1 - () DecoratedCustomViewStyle
2 - () DecoratedMediaCustomViewStyle

Notification notification = new Notification.Builder(context, CHANNEL_ID)
           .setSmallIcon(R.drawable.ic_stat_player)
           .setLargeIcon(albumArtBitmap))
           .setCustomContentView(contentView);
           .setStyle(new Notification.DecoratedCustomViewStyle())
           .build();
Messaging style
با شروع از Android 7.0 سطح API 24))، Android یک API برای سفارشی کردن اعلان فراهم می کند. برای اعلان های مرتبط با پیام از کلاس Notification.MessagingStyle استفاده کنید.
قطعه کد زیر نحوه سفارشی کردن style اعلان با استفاده از کلاس MessagingStyle را نشان می دهد
Notification notification = new Notification.Builder(context, CHANNEL_ID)
        .setStyle(new Notification.MessagingStyle("Me")
        .setConversationTitle("Team lunch")
        .addMessage("Hi", timestamp1, null) // Pass in null for user.
        .addMessage("What's up?", timestamp2, "Coworker")
        .addMessage("Not much", timestamp3, null)
        .addMessage("How about lunch?", timestamp4, "Coworker"))
        .build();

بهترین شیوه های اعلان در برنامه های پیام رسانی (messaging apps)
برای ایجاد یک برنامه که کاربران به آن توجه دارند، اعلانات خود را با دقت طراحی کنید. هنگامی که اعلانها را برنامه ریزی می کنید، اطمینان حاصل کنید که اعلان های برنامه جریان کار کاربر را قطع نمی کند. شما می توانید از بهترین شیوه های ذکر شده در اینجا به عنوان یک مرجع سریع برای آنچه در هنگام ایجاد اطلاعیه ها برای پیام های خود و برنامه های چت استفاده می کنید استفاده کنید.
استفاده  از MessagingStyle
هنگام استفاده از MessagingStyle:
1 - عنوان مکالمه را برای چت گروهی با بیش از دو نفر تنظیم کنید. یک عنوان مکالمه خوب ممکن است نام چت گروهی باشد، و اگر نام خاصی ندارد، یک لیست از شرکت کنندگان در گفتگو باشد. بدون این پیام ممکن است به عنوان یک مکالمه یک به یک با فرستنده آخرین پیام در مکالمه اشتباه باشد.
2 - از روش () setData  برای ارسال پیام های رسانه ای مانند تصاویر استفاده کنید.

از پاسخ مستقیم استفاده کنید (Use direct reply)
پاسخ مستقیم اجازه می دهد تا یک کاربر به صورت خطی به یک پیام پاسخ دهد.
1 - پس از اینکه کاربر با پاسخ مستقیم پاسخ داد، از () addMessage  برای به روز رسانی اطلاع رسانی MessaseStyle استفاده کنید و اعلان را لغو یا لغو نکنید. عدم لغو اعلان اجازه می دهد تا کاربر چندین پاسخ را با سرعتی سریع با کلاس RemoteInput ارسال کند.
2 - برای انجام عمل پاسخ در Android Wear، (setHintDisplayInlineAction (true را بزنید. این باعث میشود عمل واکنش درون اعلامیه Android Wear ظاهر شود.
3 - از روش () addHistoricMessage  برای اضافه کردن پیام های تاریخی به اعلان، متن را به یک مکالمه مستقیم پاسخ دهید.

پاسخ هوشمندانه را فعال کنید (Enable smart reply)

 

نوشتن دیدگاه


تصویر امنیتی
تصویر امنیتی جدید

تماس با آموزشگاه