در قسمت نوزدهم آموزش اندروید درباره نحوه نمایش پیام ها و اطلاعات مهم در قسمت Notification bar یا Status bar بحث کرده ایم و دلیل استفاده از این روش این است که کاربر برای مدت دلخواهی پیام موجود در Notification bar را خواهد داشت پس برای نمایش اطلاعات مهم از این روش استفاده میکنیم.
تا اینجا در آموزش های خود از Toast برای نمایش اعلان ها استفاده میکرد این کلاس زیاد کاربردی نیست چون پیام را معمولا پس از چندین ثانیه محو میکند و اگر پیام محتوی مهمی داشته باشد کاربر پس از چند ثانیه آن را از دست خواهد داد.
به همین دلیل برای نمایش پیام های مهم تر راه متداول تری وجود دارد. میتوانیم از Notification bar استفاده کنیم و پیام خود را به آنجا بفرستیم که در بالای صفحه نمایش دستگاه اندروید نمایش داده شود که عموما به آن Status bar نیز گویند.با تمرین زیر بیشتر با این روش آشنا خواهید شد.
در کل ایجاد پیغام اعلان سه مرحله دارد که شامل مراحل زیر است:
۱-ایجاد Builder از Notification که به طروق مختلف انجام میشود برای مثال میتوان بدین صورت تعریف کرد
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
۲-در مرحله دم باید با استفاده از این شی Builder ویژگی های مختلف اعلان را ازجمله آیکن ومتن و … را مشخص کرد
۳-تعریف عملیات اعلان که این مرحله اختیاری بوده و در صورت نیاز میتوان تعریف کرد (که این عملیات میتواند شامل هدایت کردن کاربر به اکتیویتی دیگر یا مکان دیگر و.. باشد) که در صورت نیاز به تعیین عملیات باید از شی PaddingIntent استفاده کنیم که شامل intentست که اکتیویتی مقصد را مشخص میکند.
۴-در مرحله آخر باید اعلان را به سیستم ارسال کرد که با استفاده از ()NotificationManager.notify اینکار را انجام میدهیم همچنین با استفاد از متد ()NotificationCompat.Builder.build تمامی ویژگی هایی که برای اعلان تنظیم کرده ایم را به سیستم ارسال میکنیم
پروژه جدیدی به نام NotificationPrj ایجاد کرده و همچنین یک فایل xml با نام notification.xml در مسیر res/layout و یک فایل جاوا بانام NotificationView.java ایجاد میکنیم .
حال در فایل activity_main.java نیز یک دکمه قرار میدهیم تا با فشردن آن یک رخداد در notification bar ایجاد شود.
<Button android:id="@+id/btn_displaynotifi" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="142dp" android:text="Display Notification" android:onClick="onClick" />
حال به قسمت کلاس های برنامه میرویم و در اکتیویتی NotificationView.java چنین کدنویسی میکنیم
import android.os.Bundle; import android.app.Activity; public class NotificationView extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.notification); Toast.makeText(this, "This is a Toat for notifocation", Toast.LENGTH_SHORT).show(); }
و همچنین در فایل MainActivity.java نیز مشخص میکنیم که با فشردن دکمه موجود در فایل main_activity.xml چه اتفاقاتی رخ دهد.
import android.app.Activity; import android.app.*; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; import android.view.View; public class MainActivity extends Activity { int notificationID=1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void onClick(View view) { displayNotification(); } protected void displayNotification() { // notification is selected Intent intent = new Intent(this, NotificationView.class); PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0); // Build notification Notification noti = new Notification.Builder(this) .setContentTitle("New notification") .setContentText("Subject").setSmallIcon(R.drawable.ic_launcher) .setContentIntent(pIntent).build(); NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notificationManager.notify(0, noti); } }
حال میتوان برنامه را اجرا کرد و نتیجه را مطابق شکل زیر مشاهده کرد.
برای نمایش یک پیام ابتدا یک شی Intent ایجاد کرده که به کلاس NotificationView اشاره دارد
Intent intent = new Intent(this, NotificationView.class);
در ادامه نیز یک شی PendingIntent نیز ایجاد میکنیم. این شی به شما اجازه میدهد در برنامه خود تا عملیاتی را به زمان دیگری موکول کنید.حال در این زمان ممکن است برنامه شما در حال اجرا و یا اجرا نباشد بدین شکل عمل میکنیم
PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);
متد ()getActivity یک شی PendingIntent دریافت میکند سپس میتوان به وسیله آرگومان های زیر آن را تکمیل نمود:
سپس یک شی از کلاس NotificationManager و Notification ایجاد میکنیم
Notification noti = new Notification.Builder(this) .setContentTitle("New notification") .setContentText("Subject").setSmallIcon(R.drawable.ic_launcher) .setContentIntent(pIntent).build(); NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
در کلاس Notification میتوان اطلاعات پیام از جمله آیکون و متن و .. را مشخص کنیم.