سرویس ها (Service) در برنامه نویسی اندروید

P O U R I A

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

  1. استفاده از سرویس (Service) برای اجرای یک سری کد به صورت مستقل از خود برنامه اندروید (حتی هنگام بسته بودن برنامه اندروید)
  2. ارجاع به Context ، در یک سرویس (Service)، در برنامه نویسی اندروید
  3. شروع یک Activity جدید، از یک سرویس (Service)، در برنامه نویسی اندروید
  4. چگونگی شناسایی عنصر تعریف شده در یک فایل xml ، در یک سرویس (Service) (چگونگی به کار بردن findViewById در یک سرویس)، در برنامه نویسی اندروید
  5. اجرا کردن یک فایل apk موجود در حافظه خارجی (external storage - فولدرهای گوشی اندروید) برای نصب، از یک سرویس (Service)، در برنامه نویسی اندروید
  6. ارسال یک مقدار (Value) از Activity به یک سرویس (Service)، در برنامه نویسی اندروید
  7. بستن (destroy کردن) یک سرویس (Service)، با کدنویسی در یک Activity ، در برنامه نویسی اندروید
  8. بستن (destroy کردن) یک سرویس (Service)، با کدنویسی در خود سرویس، در برنامه نویسی اندروید
  9. اجرای یک سری کد توسط یک سرویس (Service)، هنگام بسته شدن (destroy شدن) سرویس، با استفاده از روش onDestroy ، در برنامه نویسی اندروید


منبع: kelidestan
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
استفاده از سرویس (Service) برای اجرای یک سری کد به صورت مستقل از خود برنامه اندروید (حتی هنگام بسته بودن برنامه اندروید)

استفاده از سرویس (Service) برای اجرای یک سری کد به صورت مستقل از خود برنامه اندروید (حتی هنگام بسته بودن برنامه اندروید)

با استفاده از سرویس (Service) در برنامه نویسی اندروید، می توانیم یک سری عملیات ها (یک سری کد) را مستقل از خود برنامه اندروید، اجرا کنیم. یعنی دیگر حتی هنگامی که برنامه اندروید ما، در گوشی کاربر در حال اجرا نیست (بسته است) نیز می توانیم یک سری عملیات را اجرا کنیم، مثل دانلود فایل، نمایش پیام هایی به کاربر و ....

در واقع، کدهای سرویس (Service)، در یک Thread مجزا از خود برنامه اندروید (application) اجرا می شوند و بنابراین نیازی نیست که حتما کاربر در حال اجرای برنامه اندروید (application) باشد و ظاهر گرافیکی تعاملی (user interface) آن را ببیند. مثلا کاربر وارد برنامه اندروید می شود، بر روی دکمه دانلود یک فایل از اینترنت اشاره می کند و در حین دانلود فایل، از برنامه اندروید خارج می شود، اگر کدهای دانلود فایل، به صورت معمولی نوشته شده باشند، دانولد فایل متوقف می شود، اما اگر کدها را با استفاده از سرویس (Service) اجرا کرده باشیم، دیگر مستقل از برنامه اندروید، دانلود فایل ادامه می یابد.

اکنون نحوه ساخت یک سرویس (Service) برای برنامه اندروید را شرح می دهیم.

ابتدا باید در پروژه اندروید، یک کلاس (class) برای سرویس بسازیم که بر اساس توسعه کلاس service خواهد بود. ساختار کدهای این کلاس (class) را به صورت زیر می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]public[/B] [B]class[/B] MyService [B]extends[/B] Service [COLOR=#009900]{[/COLOR]
    
    @Override
    [B]public[/B] [COLOR=#000066][B]int[/B][/COLOR] onStartCommand[COLOR=#009900]([/COLOR]Intent intent, [COLOR=#000066][B]int[/B][/COLOR] flags, [COLOR=#000066][B]int[/B][/COLOR] startId[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
        [COLOR=#666666][I]// your code[/I][/COLOR]
        [B]return[/B] Service.[COLOR=#006633]START_FLAG_REDELIVERY[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR]
 
    @Override
    [B]public[/B] IBinder onBind[COLOR=#009900]([/COLOR]Intent intent[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
        [B]return[/B] [COLOR=#000066][B]null[/B][/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR]
 
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
در کد بالا، نام کلاس (class) را برابر MyService در نظر گرفته ایم که بر اساس توسعه (extends) کلاس Service ساخته می شود :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]public[/B] [B]class[/B] MyService [B]extends[/B] Service [COLOR=#009900]{[/COLOR][/FONT]
[/FONT][/COLOR]
کدهایی که قصد داریم توسط سرویس (Service) اجرا شود (حتی در زمانی که برنامه اندروید، باز نباشد) را باید به جای عبارت // your code بنویسید.

سپس باید در فایل AndroidManifest.xml اعلام کنیم که برنامه شامل این سرویس (Service) می باشد. بنابراین باید کدهای زیر را در فایل AndroidManifest.xml و درون تگ application قرار بدهیم (نام سرویس را باید در این کدها ذکر کنیم) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]service android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"MyService"[/COLOR] [COLOR=#339933]>[/COLOR]
[COLOR=#339933]</[/COLOR]service[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
به عنوان مثال، موقعیت قرارگیری آن را در کدهای زیر نمایش داده ایم (مثالی برای کدهای فایل AndroidManifest.xml) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<?[/COLOR]xml version[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"1.0"[/COLOR] encoding[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"utf-8"[/COLOR][COLOR=#339933]?>[/COLOR]
[COLOR=#339933]<[/COLOR]manifest xmlns[COLOR=#339933]:[/COLOR]android[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"http://schemas.android.com/apk/res/android"[/COLOR]
    [B]package[/B][COLOR=#339933]=[/COLOR][COLOR=#0000FF]"com.kelidestan.com_2"[/COLOR]
    android[COLOR=#339933]:[/COLOR]versionCode[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"1"[/COLOR]
    android[COLOR=#339933]:[/COLOR]versionName[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"1.0"[/COLOR] [COLOR=#339933]>[/COLOR]

    [COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]sdk
        android[COLOR=#339933]:[/COLOR]minSdkVersion[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"8"[/COLOR]
        android[COLOR=#339933]:[/COLOR]targetSdkVersion[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"18"[/COLOR] [COLOR=#339933]/>[/COLOR]
   
    [COLOR=#339933]<[/COLOR]application
        android[COLOR=#339933]:[/COLOR]allowBackup[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"true"[/COLOR]
        android[COLOR=#339933]:[/COLOR]icon[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@drawable/ic_launcher"[/COLOR]
        android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@string/app_name"[/COLOR]
        android[COLOR=#339933]:[/COLOR]theme[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@style/AppTheme"[/COLOR] [COLOR=#339933]>[/COLOR]
        [COLOR=#339933]<[/COLOR]activity
            android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"com.kelidestan.com_2.MainActivity"[/COLOR]
            android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@string/app_name"[/COLOR] [COLOR=#339933]>[/COLOR]
            [COLOR=#339933]<[/COLOR]intent[COLOR=#339933]-[/COLOR]filter[COLOR=#339933]>[/COLOR]
                [COLOR=#339933]<[/COLOR]action android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.intent.action.MAIN"[/COLOR] [COLOR=#339933]/>[/COLOR]

                [COLOR=#339933]<[/COLOR]category android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.intent.category.LAUNCHER"[/COLOR] [COLOR=#339933]/>[/COLOR]
            [COLOR=#339933]</[/COLOR]intent[COLOR=#339933]-[/COLOR]filter[COLOR=#339933]>[/COLOR]
        [COLOR=#339933]</[/COLOR]activity[COLOR=#339933]>[/COLOR]
        [COLOR=#339933]<[/COLOR]activity
            android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"com.kelidestan.com_2.NextActivity"[/COLOR]
            android[COLOR=#339933]:[/COLOR]label[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"@string/title_activity_next"[/COLOR] [COLOR=#339933]>[/COLOR]
        [COLOR=#339933]</[/COLOR]activity[COLOR=#339933]>[/COLOR]
        [COLOR=#339933]<[/COLOR]service android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"MyService"[/COLOR] [COLOR=#339933]>[/COLOR]
        [COLOR=#339933]</[/COLOR]service[COLOR=#339933]>[/COLOR]
    [COLOR=#339933]</[/COLOR]application[COLOR=#339933]>[/COLOR]

[COLOR=#339933]</[/COLOR]manifest[COLOR=#339933]>[/COLOR][/FONT]
[/FONT][/COLOR]
اکنون در محلی از برنامه اندروید (در هر Activity دلخواه) و یا بعد از هر عملی که کاربر انجام می دهد و قصد داریم که بعد از آن، کدهای سرویس (Service) اجرا شوند، باید با کدهای زیر، اعلام کنیم که سرویس (Service) اجرا شود :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]Context[/COLOR] context [COLOR=#339933]=[/COLOR] getApplication[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
Intent intent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]context, MyService.[B]class[/B][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
context.[COLOR=#006633]startService[/COLOR][COLOR=#009900]([/COLOR]intent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
و یا به شکل ساده تر زیر :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]Intent intent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR][B]this[/B], MyService.[B]class[/B][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
startService[COLOR=#009900]([/COLOR]intent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
بنابراین کدهای سرویس (Service) اجرا می شوند و حتی با خروج کاربر از برنامه اندروید نیز، اجرای کدهای سرویس، متوقف نخواهد شد.
 
  • Like
واکنش ها: Sima

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
ارجاع به Context ، در یک سرویس (Service)، در برنامه نویسی اندروید

ارجاع به Context ، در یک سرویس (Service)، در برنامه نویسی اندروید

برای ارجاع به Context ، در یک سرویس (Service)، باید کلمه زیر را به کار ببریم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]this[/B][/FONT]
[/FONT][/COLOR]
به عنوان مثال، برای استفاده از روش Toast برای نمایش یک پیام به مدت چند ثانیه، باید کد زیر در میان کدهای سرویس (Service) نوشته شود :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]Toast.[COLOR=#006633]makeText[/COLOR][COLOR=#009900]([/COLOR][B]this[/B], [COLOR=#0000FF]"www.www.www.iran-eng.ir"[/COLOR], Toast.[COLOR=#006633]LENGTH_SHORT[/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]show[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
نکته :

برای اجرای کدهای مختلف، باید دقت کنید که به چه Context ای نیاز داریم. به عنوان مثال، برای شروع یک Activity جدید با استفاده از روش Intent ، دیگر کلمه this به آن Context مورد نظر ما ارجاع نمی دهد(پست بعد).
 
  • Like
واکنش ها: Sima

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
شروع یک Activity جدید، از یک سرویس (Service)، در برنامه نویسی اندروید

شروع یک Activity جدید، از یک سرویس (Service)، در برنامه نویسی اندروید

فرض کنید که قصد داریم در یک سرویس (Service)، کدی بنویسیم که با اجرای آن، به یک Activity جدید با نام NextActivity برویم. برای این منظور، باید کدهای زیر را در میان کدهای سرویس (Service) بنویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]Intent myIntent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]getBaseContext[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR], NextActivity.[B]class[/B][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
myIntent.[COLOR=#006633]addFlags[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]FLAG_ACTIVITY_NEW_TASK[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
getApplication[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]startActivity[/COLOR][COLOR=#009900]([/COLOR]myIntent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
 
  • Like
واکنش ها: Sima

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
چگونگی شناسایی عنصر تعریف شده در یک فایل xml ، در یک سرویس (Service) (چگونگی به کار بردن findViewById در یک سرویس)

چگونگی شناسایی عنصر تعریف شده در یک فایل xml ، در یک سرویس (Service) (چگونگی به کار بردن findViewById در یک سرویس)

فرض کنید که در یک فایل xml ، یک ImageView تعریف کرده ایم که برای شناسایی آن، باید کدهای زیر را در Activity بنویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]ImageView view [COLOR=#339933]=[/COLOR] [COLOR=#009900]([/COLOR]ImageView[COLOR=#009900])[/COLOR] findViewById[COLOR=#009900]([/COLOR]R.[COLOR=#006633]id[/COLOR].[COLOR=#006633]imageView1[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
اما کدهای فوق، تنها برای آن Activity صحیح می باشد، زیرا فایل xml ای که ImageView در آن تعریف شده، فایل xml متناظر برای آن Activity است. اما اگر بخواهیم همین عنصر ImageView را در یک سرویس (Service) شناسایی کنیم، کدهای فوق با پیام خطا روبرو می شوند. بنابراین در ادامه، شیوه شناسایی عنصر مورد نظر در سرویس (Service) را شرح می دهیم.

به جای کدهای قبلی، کدهای زیر را در سرویس (Service) می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]LayoutInflater inflater [COLOR=#339933]=[/COLOR] [COLOR=#009900]([/COLOR]LayoutInflater[COLOR=#009900])[/COLOR] getSystemService[COLOR=#009900]([/COLOR]LAYOUT_INFLATER_SERVICE[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]View[/COLOR] layout [COLOR=#339933]=[/COLOR] inflater.[COLOR=#006633]inflate[/COLOR][COLOR=#009900]([/COLOR]R.[COLOR=#006633]layout[/COLOR].[COLOR=#006633]activity_main[/COLOR], [COLOR=#000066][B]null[/B][/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
ImageView view [COLOR=#339933]=[/COLOR] [COLOR=#009900]([/COLOR]ImageView[COLOR=#009900])[/COLOR] layout.[COLOR=#006633]findViewById[/COLOR][COLOR=#009900]([/COLOR]R.[COLOR=#006633]id[/COLOR].[COLOR=#006633]imageView1[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
این کد به درستی می تواند عنصر ImageView مورد نظر را شناسایی کند (به آن ارجاع بدهد). دقت کنید که در کد بالا، فایل xml حاوی آن عنصر ImageView را با عبارت زیر ذکر کرده ایم (زیرا باید بداند در کدام فایل xml ، عنصر مورد نظر تعریف شده است) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]R.[COLOR=#006633]layout[/COLOR].[COLOR=#006633]activity_main[/COLOR][/FONT]
[/FONT][/COLOR]
عبارت بالا، به فایل activity_main.xml اشاره کرده است.
 
  • Like
واکنش ها: Sima

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
اجرا کردن یک فایل apk موجود در حافظه خارجی (external storage - فولدرهای گوشی اندروید) برای نصب، از یک سرویس (Service)

اجرا کردن یک فایل apk موجود در حافظه خارجی (external storage - فولدرهای گوشی اندروید) برای نصب، از یک سرویس (Service)

در مبحثی دیگر (#7)، چگونگی اجرا کردن یک فایل apk موجود در حافظه خارجی (external storage - فولدرهای گوشی اندروید) برای نصب را شرح دادیم، ولی برای اجرای همین عملیات در یک سرویس (Service)، کدها کمی تفاوت خواهد بود.

فرض کنید که یک فایل apk درون فولدرهای گوشی اندروید (حافظه خارجی - external storage) داریم و می خواهیم آن را با یک سری کد اجرا کنیم تا پیام نصب به کاربر نمایش داده شود (البته با کدنویسی در یک سرویس). برای این منظور، کدهای زیر را در میان کدهای سرویس (Service) می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]Intent intent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]ACTION_VIEW[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
intent.[COLOR=#006633]setFlags[/COLOR][COLOR=#009900]([/COLOR]Intent.[COLOR=#006633]FLAG_ACTIVITY_NEW_TASK[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
intent.[COLOR=#006633]setDataAndType[/COLOR][COLOR=#009900]([/COLOR]Uri.[COLOR=#006633]fromFile[/COLOR][COLOR=#009900]([/COLOR][B]new[/B] [COLOR=#003399]File[/COLOR][COLOR=#009900]([/COLOR][COLOR=#003399]Environment[/COLOR].[COLOR=#006633]getExternalStorageDirectory[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]+[/COLOR][COLOR=#0000FF]"/myFolder/"[/COLOR] [COLOR=#339933]+[/COLOR] [COLOR=#0000FF]"myFile.apk"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR], [COLOR=#0000FF]"application/vnd.android.package-archive"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
getApplication[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR].[COLOR=#006633]startActivity[/COLOR][COLOR=#009900]([/COLOR]intent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
که در آن، myFolder نام فولدر حاوی فایل (درون فولدربندی اصلی گوشی) و myFile.apk ، نام فایل apk می باشد. دقت کنید که اگر فایل apk در فولدر اصلی گوشی اندروید قرار گرفته باشد، باید عبارت زیر در کدها را :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]"/myFolder/"[/COLOR][/FONT]
[/FONT][/COLOR]
به عبارت زیر تبدیل کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]"/"[/COLOR][/FONT]
[/FONT][/COLOR]
دقت شود که در صورت کدنویسی برای فرآیندی که نیاز به دسترسی به حافظه خارجی (external storage) دارد، باید کدهای زیر درون AndroidManifest.xml نوشته شود (برای اجازه دادن برای نوشتن در حافظه خارجی و یا خواندن از حافظه خارجی) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.WRITE_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR]
[COLOR=#339933]<[/COLOR]uses[COLOR=#339933]-[/COLOR]permission android[COLOR=#339933]:[/COLOR]name[COLOR=#339933]=[/COLOR][COLOR=#0000FF]"android.permission.READ_EXTERNAL_STORAGE"[/COLOR] [COLOR=#339933]/>[/COLOR][/FONT]
[/FONT][/COLOR]
 
  • Like
واکنش ها: Sima

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
ارسال یک مقدار (Value) از Activity به یک سرویس (Service)، در برنامه نویسی اندروید

ارسال یک مقدار (Value) از Activity به یک سرویس (Service)، در برنامه نویسی اندروید

فرض کنید که یک سرویس (Service) با نام MyService داریم و می خواهیم از Activity ، یک رشته (String) را به آن ارسال کنیم. قبلا به طور معمولی، در Activity ، کد زیر را برای شروع سرویس MyService می نوشتیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]Intent intent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR][B]this[/B], MyService.[B]class[/B][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
startService[COLOR=#009900]([/COLOR]intent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
اما اکنون برای ارسال یک مقدار (value) به سرویس MyService ، باید یک سری کد دیگر نیز به کدها اضافه شود :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]Intent intent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR][B]this[/B], MyService.[B]class[/B][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#003399]String[/COLOR] myString [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]"www.www.iran-eng.ir"[/COLOR][COLOR=#339933];[/COLOR]
intent.[COLOR=#006633]putExtra[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"StringName"[/COLOR], myString[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
startService[COLOR=#009900]([/COLOR]intent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
سپس درون کدهای سرویس MyService ، باید کدهای روش onStartCommand مشابه کدهای زیر باشد (یک خط کد را در روش onStartCommand نوشته ایم) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]@Override
[B]public[/B] [COLOR=#000066][B]int[/B][/COLOR] onStartCommand[COLOR=#009900]([/COLOR]Intent intent, [COLOR=#000066][B]int[/B][/COLOR] flags, [COLOR=#000066][B]int[/B][/COLOR] startId[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
        
    [COLOR=#003399]String[/COLOR] receivedString [COLOR=#339933]=[/COLOR] intent.[COLOR=#006633]getStringExtra[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"StringName"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#666666][I]// your codes[/I][/COLOR]
        
    [B]return[/B] Service.[COLOR=#006633]START_FLAG_REDELIVERY[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
 
  • Like
واکنش ها: Sima

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
بستن (destroy کردن) یک سرویس (Service)، با کدنویسی در یک Activity ، در برنامه نویسی اندروید

بستن (destroy کردن) یک سرویس (Service)، با کدنویسی در یک Activity ، در برنامه نویسی اندروید

شرح دادیم که اگر یک سرویس (Service) با نام MyService داشته باشیم، برای شروع (اجرای) آن سرویس، کد زیر را در Activity مورد نظرمان اجرا می کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]Context[/COLOR] context [COLOR=#339933]=[/COLOR] getApplication[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
Intent intent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]context, MyService.[B]class[/B][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
context.[COLOR=#006633]startService[/COLOR][COLOR=#009900]([/COLOR]intent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
اکنون چنانچه بخواهیم سرویس (Service) مورد نظر بسته شود (destroy شود)، کد زیر را در Activity اجرا می کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#003399]Context[/COLOR] context [COLOR=#339933]=[/COLOR] getApplication[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
Intent intent [COLOR=#339933]=[/COLOR] [B]new[/B] Intent[COLOR=#009900]([/COLOR]context, MyService.[B]class[/B][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
context.[COLOR=#006633]stopService[/COLOR][COLOR=#009900]([/COLOR]intent[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
 
  • Like
واکنش ها: Sima

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
بستن (destroy کردن) یک سرویس (Service)، با کدنویسی در خود سرویس، در برنامه نویسی اندروید

بستن (destroy کردن) یک سرویس (Service)، با کدنویسی در خود سرویس، در برنامه نویسی اندروید

برای بستن (destroy کردن) یک سرویس (Service)، با کدنویسی در خود سرویس، باید کد زیر در سرویس اجرا شود :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]this[/B].[COLOR=#006633]stopSelf[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]

 
  • Like
واکنش ها: Sima

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
اجرای یک سری کد توسط یک سرویس (Service)، هنگام بسته شدن (destroy شدن) سرویس، با استفاده از روش onDestroy ، در برنامه نویسی اندروید

اجرای یک سری کد توسط یک سرویس (Service)، هنگام بسته شدن (destroy شدن) سرویس، با استفاده از روش onDestroy ، در برنامه نویسی اندروید

با استفاده از روش onDestroy می توانیم تعیین کنیم که هنگام بسته شدن (destroy شدن) سرویس (Service)، یک سری کد اجرا شوند.

فرض کنید ساختار کدهای سرویس به صورت زیر باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]public[/B] [B]class[/B] MyService [B]extends[/B] Service [COLOR=#009900]{[/COLOR]
    
    @Override
    [B]public[/B] [COLOR=#000066][B]int[/B][/COLOR] onStartCommand[COLOR=#009900]([/COLOR]Intent intent, [COLOR=#000066][B]int[/B][/COLOR] flags, [COLOR=#000066][B]int[/B][/COLOR] startId[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
        [COLOR=#666666][I]// your code[/I][/COLOR]
        [B]return[/B] Service.[COLOR=#006633]START_FLAG_REDELIVERY[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR]
 
    @Override
    [B]public[/B] IBinder onBind[COLOR=#009900]([/COLOR]Intent intent[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
        [B]return[/B] [COLOR=#000066][B]null[/B][/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR]
 
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
اکنون روش onDestroy را باید به آن اضافه کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]@Override
[B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] onDestroy[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900]{[/COLOR]
    [COLOR=#666666][I]// some code[/I][/COLOR]
    [B]super[/B].[COLOR=#006633]onDestroy[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
که در آن باید کدهای مورد نظرمان (کدهایی که قصد داریم هنگام destroy شدن سرویس، اجرا شوند) را به جای عبارت // some code بنویسیم.

موقعیت قرارگیری کدهای روش onDestroy را در کد زیر نمایش داده ایم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][B]public[/B] [B]class[/B] MyService [B]extends[/B] Service [COLOR=#009900]{[/COLOR]
    
    @Override
    [B]public[/B] [COLOR=#000066][B]int[/B][/COLOR] onStartCommand[COLOR=#009900]([/COLOR]Intent intent, [COLOR=#000066][B]int[/B][/COLOR] flags, [COLOR=#000066][B]int[/B][/COLOR] startId[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
        [COLOR=#666666][I]// your code[/I][/COLOR]
        [B]return[/B] Service.[COLOR=#006633]START_FLAG_REDELIVERY[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR]
 
    @Override
    [B]public[/B] IBinder onBind[COLOR=#009900]([/COLOR]Intent intent[COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR]
        [B]return[/B] [COLOR=#000066][B]null[/B][/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR]
    
    @Override
    [B]public[/B] [COLOR=#000066][B]void[/B][/COLOR] onDestroy[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900]{[/COLOR]
        [COLOR=#666666][I]// some code[/I][/COLOR]
        [B]super[/B].[COLOR=#006633]onDestroy[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#009900]}[/COLOR]
 
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
 
  • Like
واکنش ها: Sima
بالا