با سلام خدمت کاربران سایت نیک اندروید در خدمتون هستیم با آموزش  نحوه کار با کلاس notificationManager

همونطور که میدونید خیلی وقتها لازمه تا یه فایلی رو از اینترنت یا سرورتون رو برای کاربر دانلود کنید تو این اموزش خواهید آموخت چطور از کلاس asynctask استفاده کنید و همینطور پنجره progressbar رو در نوار اعلان اندروید کاربر نمایش بدین تا کاربر بتونه در حین دانلود کارهای دیگه ای رو انجام بده و زیاد دست و پا گیر نباشه .

اینجا برای نمایش progressbar در اندروید استودیو  از کلاس NotificationManager  استفاده خواهیم کرد.

ابتدا یه دکمه در layout اصلی برنامه ایجاد میکنیم با فشار این کلید عملیاتی رو در کلاس asynctask انجام میده و progressbar در نوار اعلان به نمایش در میاد.

image1

میریم داخل فایل MainActivity.java و قبل از هر چیز متغیرهامونو تعریف میکنیم.


private NotificationManager mNotifyManager;
private Builder mBuilder;
int id = 1;

اگر اندروید استودیو نتونست کلاس Builder رو ایمپورت کنه این خط رو تو قسمت ایمپورت ها دستی اضافه کنید .


import android.support.v4.app.NotificationCompat.Builder;

کلیدی که در لایه اضافه کردیم رو اینجا تعریف میکنیم و فعالیت setonclick رو براش میزارم تا هر وقت کاربر روی این کلید زد عملیات ما شروع بشه و دستورات زیر رو هم داخلش قرار میدیم:

Button b1 = (Button) findViewById(R.id.button1);
b1.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {

mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mBuilder = new NotificationCompat.Builder(MainActivity.this);
mBuilder.setContentTitle("Download")
.setContentText("Download in progress")
.setSmallIcon(R.drawable.ic_download);
new Downloader().execute();
}
});

همانطور که مشاهده میکنید ما کلیدمون رو تعریف کردیم و گفتیم وقتی کاربر اون رو لمس کرد دستوراتی رو برامون انجام بده در اینجا ما کلاس NotificationManager رو تعریف کردیم و همچنین یه builder‌ساختیم با همین کلاس .

دستور setContentTitle تیتر بخش اعلان ما رو تنظیم میکنه .

دستور setContentText توضیحات بخش اعلان رو برامون تعریف میکنه .

دستور setsmallIcon هم یه آیکون میگیره .

نکته: دستور setLargeIcon هم هستش که یه Bitmap رو میگیره و شما میتونید تصویری رو کنار progressbar قرار بدین . بعد از انجام این تنظیمات کلاس Downloader رو صدا میزنیم. در قسمت پایین کدهای این کلاسمون هست که از Asynctask مشتق شده :


private class Downloader extends AsyncTask<Void, Integer, Integer> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// نمایش نوار وضعیت برای اولین بار
mBuilder.setProgress(100, 0, false);
mNotifyManager.notify(id, mBuilder.build());
}

@Override
protected void onProgressUpdate(Integer... values) {
//به روز کردن نوار وضعیت
mBuilder.setProgress(100, values[0], false);
mNotifyManager.notify(id, mBuilder.build());
super.onProgressUpdate(values);
}

@Override
protected Integer doInBackground(Void... params) {
int i;
for (i = 0; i <= 100; i += 5) {
// تنظیم نوار وضعیت که بعد هر چند ثانیه نوار را پر میکند
publishProgress(Math.min(i, 100));
try {
//زمان سنج
Thread.sleep(2 * 1000);
} catch (InterruptedException e) {
Log.d("TAG", "خطای تایمر");
}
}
return null;
}

@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
mBuilder.setContentText("Download complete");
// حذف نوار وضعیت بعد از اتمام کار
mBuilder.setProgress(0, 0, false);
mNotifyManager.notify(id, mBuilder.build());
}
}

در این کلاس ما نوار وضعیت یا همون progressbar رو فعال کردیم. و سپس با استفاده از یک تایمر که هر چند ثانیه progressbar رو آپدیت میکنه و مقداری رو به جلو حرکت میکنه رو گذاشتیم . بعد از اتمام این چرخه با استفاده از دستور setContentText پیغامی مبنی کامل شدن دانلود نمایش داده میشه .

شما میتونید در کلاس Asynctask دستورات دیگه رو مثل دانلود فایل از سرور و یا …. اجرا کنید .

حالا برنامه رو اجرا میکنیم :

image2

image3

لینک سورس همین پروژه هم برای شما تهیه شده که داخل همین مجموعه میتونید پروژه رو دانلود کنید.

TestDownload

بارگذاری بیشتر مطالب مرتبط
بارگذاری توسط مدیر پوریا انجمنی

۳ نظرات

  1. محمدرضا

    اردیبهشت ۱۰, ۱۳۹۵ at ۱۰:۴۹ ب.ظ

    لطفا ارسال نوتیفیکیشن از سرور رو آموزش بدید آمووزش قوی در جایی پیدا نمی شه با تشکر

    پاسخ

  2. ali

    خرداد ۲۴, ۱۳۹۵ at ۹:۳۷ ب.ظ

    سلام
    داداش قسمت کد های آموزشتون بهم ریختس و نمیشه از آموزش استفاده کرد

    پاسخ

    • مدیر فنی

      خرداد ۲۵, ۱۳۹۵ at ۹:۵۹ ق.ظ

      سلام چک شدن مشکلی نداره شاید ورژن مرورگرتون خیلی پایینه

      پاسخ

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد.

14 − 8 =