Service و Broadcast Receiver در اندروید

Service و Broadcast Receiver در اندروید
سرویس در اندروید برای برنامه هایی به کار میرود که نیاز به انجام فعالیت هایی در بک گراند سیستم دارند و همچنین برنامه هایی که کاربر نمیخواهد از آن به صورت مداوم استفاده کند ولی برنامه باید کارهای خاصی را به صورت مداوم انجام دهد، برای مثال برنامه ی مورد نظر بدون اینکه باز باشد هنگامی که از سرور اطلاعات جدید دریافت کرد به شما ناتیفیکیشن میدهد، برای مثال برنامه های گفت و گو و چت به این صورت میباشند، همچنین Broadcast Receiver برای نیز برای گرفتن پیغام های همگانی در سیستم تلفن همراه میباشد، با مجیدآنلاین در این مقاله همراه باشید
دارالترجمه رسمی
دارالترجمه رسمی پارسیس شامل خدمات ترجمه رسمی و تخصصی در بیش از 60 زبان زنده دنیا
جای بروشور دیواری
خرید جای بروشور دیواری و رومیزی
افزونه های سئو وردپرس
بهترین افزونه های سئو وردپرس به صورت کاملا فارسی
تعمیر لوازم خانگی
تعمیر جاروبرقی، مایکروفر، بخارشوی، ظرفشویی، لباسشویی، سولاردام، کولرگازی
خودتان را اینجا معرفی کنید

پیش نیاز : تسلط مناسب به مفاهیم ابتدایی اندروید

سرویس ها در اندروید

هر سرویس باید با تگ <service> در manifest معرفی شود، سرویس ها میتوانند از طریق ()Context.startService و ()Context.bindService اجرا شوند، در اندروید میتوانید از کلاس Service استفاده کنید تا اپلیکیشن هایی بسازید که لازم است در پشت پرده عملیات خاصی را انجام دهند، برخلاف Activity که هنگامی که روبروی شما باشد کار میکند، سرویس ها در بک گراند سیستم فعالیت میکنند.
برای مثال به سرویس زیر توجه کنید :
public class MyService extends Service {
   

    // Unique Identification Number for the Notification.
    // We use it on Notification start, and to cancel it.
    private int NOTIFICATION = R.string.local_service_started;

    /**
     * Class for clients to access.  Because we know this service always
     * runs in the same process as its clients, we don't need to deal with
     * IPC.
     */
    public class LocalBinder extends Binder {
        LocalService getService() {
            return LocalService.this;
        }
    }

    @Override
    public void onCreate() {
           
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i("LocalService", "Received start id " + startId + ": " + intent);
        // We want this service to continue running until it is explicitly
        // stopped, so return sticky.
        return null;
    }

    @Override
    public void onDestroy() {
        
    }

    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }
مشخص کردن شروع سیستم :
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if ((flags & START_FLAG_RETRY) == 0) {
// TODO If it’s a restart, do something.
}
else {
// TODO Alternative background process.
}
return Service.START_STICKY;
}
همچنین اضافه کردن سرویس به Manifest :
<service android:enabled="true" android:name=".MyService"/>
همچنین اگر بخواهیم سرویس شروع به کار کند به صورت زیر عمل میکنیم :
// Create Intent
Intent intent=new Intent(this,MyService.class);
// start the service
startService(intent);
همچنین میتوان با دستور زیر به یک سرویس به صورت خودکار پایان داد :
stopSelf(startId);
مثال زیر یک مثال مناسب از سرویس ها میباشد، به آن دقت کنید :
public class VibrateService  extends Service

{

   

    @Override
            public void onStart(Intent intent, int startId) {
                // TODO Auto-generated method stub
                super.onStart(intent, startId);
               
                       
                       
                                    Vibrator v = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
                                    //  To  Vibrate in a pattern
                                    long pattern[]={0,800,200,1200,300,2000,400,4000};
                                    v.vibrate(pattern, -1);
                             }

        @Override
        public IBinder onBind(Intent intent)
        {
            // TODO Auto-generated method stub
            return null;
        }
      
}
ویبره ای که انتظار داریم با رشته ی زیر نواخته خواهد شد :
long pattern[]={0,800,200,1200,300,2000,400,4000}
این رشته به این معنی است که ابتدا :
  1. 0 ثانیه حالت سایلنت داریم
  2. 800 میلی ثانیه ویبره
  3. 200 میلی ثانیه سایلنت
  4. 1200 میلی ثانیه ویبره
  5. و به همین ترتیب ادامه دارد
اگر حالت ویبره ی خاصی برای اپ مورد نظرمان تعریف نکرده باشیم، همه چیز به صورت حالت پیشفرض اندروید خواهد بود.

Broadcast Reciever در اندروید

Broadcast Reciever در اندروید به پیغام های همگانی گوش میدهد، برای مثال پیغام هایی مثل پیغام کم بودن شارژ تلفن هوشمند، پیغام رسیدن پیامک و ...
انواع پیغام های Broadcast :
  1. پیغام های عادی Broadcast که ناهمگام یا asynchronous هستند، یعنی بدون ترتیب خاصی انجام میشوند و گاهی ممکن است به صورت همزمان انجام شوند.
  2. پیغام های طبقه بندی شده، اولویت دادن به این پیغام ها از طریق android:priority انجام میشود، عملیاتی هایی که priority یکسان دارند با ترتیب دلخواه اجرا میشوند.
در این قسمت 2 مثال مناسب از Broadcast Reciever میزنیم،
BOOT_COMPLETED برای زمانی که بوت سیستم تمام شود :
<receiver android:name=".BootReceiver">
                        <intent-filter>
                                <action android:name="android.intent.action.BOOT_COMPLETED" />
                                <category android:name="android.intent.category.HOME" />
                        </intent-filter>
   </receiver>
SMS_RECEIVED برای زمانی که پیامکی برسد :
<receiver android:name=".SMSReciever">
            <intent-filter  android:priority="1000">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
              
            </intent-filter>
 </receiver>
همچنین باید اجازه ی دسترسی را در فایل manifest تعریف کنیم :
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
برای کنترل این عملیات باید یک کلاس جاوا بسازیم و آن را از BroadcastReceiver ارث بری کنیم و در آن متد ()onReceive را override کنیم، درون این متد کارهایی که میخواهیم انجام دهیم را مینویسیم برای مثال هنگامی که یک پیامک رسید یا بوت تمام شد چه اتفاقاتی رخ دهد.

محمد یه دانشجوی فناوری اطلاعات هست که از سال 92 فعالیتش رو شروع کرد، در حال حاضر در زمینه ی برنامه نویسی تحت وب و اندروید و شبکه های ارتباطی سیسکو فعالیت میکنه .

نظرات و سوالات کاربران

ارسال پاسخ بهزاد عبدی
بهزاد عبدی
پنج شنبه ۲۳ آذر ۱۳۹۶ ۱۴:۵۴
بسیار بسیار عالی خیلی از لطف شما ممنونم.