میحرلا نمحرلا للها مسب - tahlildadeh.com android.pdf · 7 دحاو - 561...

12
آموزشگاه: تهران- خيابان شريعت ی- با تر از خ ي ابان ملک- جنب بانکدرات صا- ک پ561 - واحد7 آدرس88146323 - 88446780 - 88146330 ن الرحیم الرحم بسم ایل داده آموزشگاه تحل تخصصی ترین مرکز ایرانتابیس در و دیسی برنامه نوی آموزشIntent در اندروید) قسمت اول( دس افشین رفوآ مدرس : مهن

Upload: others

Post on 29-Oct-2019

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: میحرلا نمحرلا للها مسب - tahlildadeh.com android.pdf · 7 دحاو - 561 کلاپ - تارداص کناب بنج - کلم نابايخ زا رت لااب - یتعيرش

7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330

بسم اهلل الرحمن الرحیم

آموزشگاه تحلیل داده

برنامه نویسی و دیتابیس در ایران ترین مرکز تخصصی

) اول قسمت ( اندروید در Intent آموزش

مدرس : مهندس افشین رفوآ

Page 2: میحرلا نمحرلا للها مسب - tahlildadeh.com android.pdf · 7 دحاو - 561 کلاپ - تارداص کناب بنج - کلم نابايخ زا رت لااب - یتعيرش

7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330

)قسمت اول(در اندروید Intent آموزش

ها به منظور برقراری ارتباط بین کامپوننت های اندروید را تشریح intentاین فصل آموزشی شیوه ی بکارگیری

.نوشته شده است Android 4.4و Eclipse 4.4، Java 1.6می کند و بر پایه ی

فهرست محتوا

1 .Intent ها وintent filter ها

Intent چیست و چه کاربردی دارد؟

راه اندازیactivity به وسیله ی متد( مورد نظرstartActivity (intent) )

Sub-activity چیست؟

راه اندازیServices به وسیله یintent

intent. انواع 2

معرفی انواع متفاوتintent

Intent های صریح(Explicit intent)

Intent های ضمنی(Implicit intent)

ها activity. انتقال داده بین 3

)انتقال داده به کامپوننت مقصد )مورد نظر

مثال : به اشتراک گذاری اطالعات از طریق(share) intent

بازیابی و دریافت نتیجه ازsub-activity

ها intent filter. معرفی 4

Intent filter چه کاربردی دارد ؟

تعریفintent filter

1مثال

Page 3: میحرلا نمحرلا للها مسب - tahlildadeh.com android.pdf · 7 دحاو - 561 کلاپ - تارداص کناب بنج - کلم نابايخ زا رت لااب - یتعيرش

7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330

ثبت یکactivity برای اینتنتACTION_SEND

intent. فعال سازی رویدادها به وسیله ی 5

های معتبر intent receiver. بررسی و شناسایی 6

ها activity. تمرین : راه اندازی 7

هدف اصلی این تمرین

ایجاد پروژه و طرح بندی اصلی

ایجاد فایلlayout جدید

ایجادactivity دیگر

راه اندازیsub-activity

ارسال داده بهResultActivity

دستیابی به داده هایintent درResultActivity

ها sub-activity. تمرین : دریافت داده از 8

هدف این تمرین

برگرداندن داده ازResultActivity

ارزیابی اطالعات بازگشتی

ها intentبکارگیری. راه حل : 9

مطالب این فصلنحوه ی پیاده سازی

کدactivity

به عنوان مرورگر activity. تمرین : ثبت و تخصیص یک 10

هدف از این تمرین

ساختن پروژه

Page 4: میحرلا نمحرلا للها مسب - tahlildadeh.com android.pdf · 7 دحاو - 561 کلاپ - تارداص کناب بنج - کلم نابايخ زا رت لااب - یتعيرش

7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330

ثبت یکactivity به عنوان مرورگر

اعتبارسنجی و تست

: تبدیل آن به یک مرورگر کامل تمرین بیشتر

intent. تمرین : انتخاب تصویر به وسیله ی 11

مقصود نهایی تمرین

ایجاد پروژه

تست

های ضمنی مختلف intent. تمرین : استفاده از 12

هدف تمرین

ساختن پروژه

تست برنامه

1 .Intent ها وintent filter ها

Intent چیست و چه کاربردی دارد؟

Intent ها در واقع مجموعه ای از پیام های ناهمگام(asynch message) هستند که به مولفه های برنامه ی

intentاجازه می دهند از دیگر کامپوننت های اندروید قابلیت درخواست کند ) (app components) کاربردی

بین زیرروال ها یا ،در حقیقت یک مکانیزم نرم افزاری می باشد که برای کاربر این امکان را فراهم می کند

ها intent .معینی به انجام برسد( taskعملکردهای برنامه های کاربردی هماهنگی ایجاد کرده تا یک وظیفه یا

ننت های یک برنامه با کامپوننت های برنامه های همچنین این قابلیت را ایجاد می کند که عالوه بر کامپو

ای اشاره کرد که فعالیتی مثل activityبه عنوان مثال می توان به .کاربردی دیگر نیز تعامل داشته باشید

.کند (trigger)ای دیگر )خارجی( است را راه اندازی activityگرفتن عکس را که متعلق به

Page 5: میحرلا نمحرلا للها مسب - tahlildadeh.com android.pdf · 7 دحاو - 561 کلاپ - تارداص کناب بنج - کلم نابايخ زا رت لااب - یتعيرش

7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330

Intent ها اشیایی از نوعandroid.content.intent کدی که شما می نویسید قادر است آن ها را به .هستند

می ،به طور مثال .سیستم اندروید ارسال کرده تا از این طریق کامپوننت های موردنظر شما تعریف شوند

.ازی کنددستور بدید که برنامه ی معینی را راه اند intentبه () StartActivityتوانید با استفاده از متد

Intent از طریقBundle به منظور ارسال اطالعات بین )= به طور معمولactivity های مختلف اندروید بکار می

receivingکنندهحال این اطالعات توسط کامپوننت دریافت ،رود( قادر است اطالعات الزمه را دربرگیرد

component) ) مورد استفاده قرار می گیرد.

راه اندازیactivity به وسیله ی متد( مورد نظر (startActivity intent) )

Context متد مذکور در شی .استفاده کنید startActivity (intent) از متد ،activityجهت راه اندازی و اجرای

.بسط و توسعه داده می شود Activityتعریف شده که توسط )کالس(

.نمایش می دهد intentدیگر را به وسیله ی activityکد زیر نحوه ی راه اندازی یک

Page 6: میحرلا نمحرلا للها مسب - tahlildadeh.com android.pdf · 7 دحاو - 561 کلاپ - تارداص کناب بنج - کلم نابايخ زا رت لااب - یتعيرش

7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330

# Start the activity connect to the

# specified class

Intent i = new Intent(this، ActivityTwo.class);

startActivity(i);

Sub-activities

.های دیگر راه اندازی می شوند activityهایی که توسط activityعبارتند از

راه اندازیServices به وسیله یintent

را startService (Intent)برای این منظور متد .راه اندازی کرد intentها را از طریق serviceهمچنین می توان

.بکارببرید

intent. انواع 2

معرفی انواع متفاوتintent

.Implicitو Explicitپشتیبانی می کند : intentاندروید از دو نوع

explicitتعریف کند )که در آن صورت intentداخل تواند کامپوننت مقصود را مستقیم یک اپلیکیشن می

intent ( یا از سیستم اندروید درخواست کند تا مولفه های ثبت شده )نامیده می شودregistered

componentبر اساس داده های ( راintent که به آن( ارزیابی کندimplicit intent )گفته می شود.

Intent های صریح(Explicit intent)

مولفه را ) کامپوننتی را که باید توسط سیستم اندروید فراخوانده شود( با استفاده از کالس جاوا Intentاین

(java class)، به صورت صریح تعریف می کند ،به عنوان شناسه.

.و ارسال آن به سیستم اندروید را با مثال نمایش می دهد explicit intentکد زیر نحوه ی ایجاد

Page 7: میحرلا نمحرلا للها مسب - tahlildadeh.com android.pdf · 7 دحاو - 561 کلاپ - تارداص کناب بنج - کلم نابايخ زا رت لااب - یتعيرش

7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330

Intent i = new Intent(this،‎ ActivityTwo.class);‎

i.putExtra("Value1"‎،‎ "This value one for ActivityTwo ");‎

i.putExtra("Value2"‎،‎ "This value two ActivityTwo");

در این ،درون اپلیکیشن خود بکار می برید activityهای صریح را به منظور راه اندازی intentشما اغلب

را می خواهید راه اندازی کنید )و دیگر نیازی به تالش و زحمت activityاطالع دارید که کدام صورت دقیق

.هست وجود ندارد( implicit intentبیشتر که الزمه ی

Intent های ضمنی(Implicit intent)

مولفه یا کامپوننتی که باید فراخوانی شود را های ضمنی واضح و مستقیم intent ،های صریح intentبرخالف

ای که باید اجرا شود را تعریف می کند ) همچنین می (action)به عبارتی روشن تر تنها عمل ;مشخص نمی کند

.نوع داده را مشخص کرد( uriبه همراه یک intentتوان با بکارگیری همزمان این نوع

.یک صفحه ی وب را نمایش دهد ،برای مثال تکه کد زیر به سیستم اندروید دستور می دهد

‎Intent i = new Intent(Intent.ACTION_VIEW،‎

Uri.parse("http://www.vogella.com"));‎

startActivity(i);

actionبه دنبال همه ی کامپوننت هایی که برای intent ،ضمنی به سیستم اندروید intentدر صورت ارسال

.معین تخصیص یافته و نوع داده ی مناسب آن می گردد

.اندروید خود به صورت مستقیم کامپوننت مزبور را راه اندازی می کند ،چنانچه تنها یک کامپوننت یافت شود

selection)کاربر یک محاوره ی انتخاب ،اما اگر چندین مولفه با هم توسط سیستم اندروید شناسایی شود

dialogue) دریافت می کند که به کاربر اجازه می دهد کامپوننت مناسب را برایintent انتخاب کند.

.معینی تخصیص دهد (actions)ننت این قابلیت را دارد که خود را به عملیات کامپو

ها activity. انتقال داده بین 3

)انتقال داده به کامپوننت مقصد )مورد نظر

Page 8: میحرلا نمحرلا للها مسب - tahlildadeh.com android.pdf · 7 دحاو - 561 کلاپ - تارداص کناب بنج - کلم نابايخ زا رت لااب - یتعيرش

7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330

Intent داده های سرآیند حامل (header data) معینی از جملهaction /می .نوع آن و غیره ،عملیات دلخواه ..

نمونه ی .( دربرگیردBundleمی تواند اطالعاتی اضافه بر سازمان )بر اساس نمونه ی کالس intentالبته .باشد

بازیابی مربوط intentاز () getExtras( را می توان با استفاده از متد Bundle)کالس بیان شدهکالس

(retrieve) کرد.

() PutExtra( overloaded methods) اضافه بارگذاری شده یاین امکان نیز وجود دارد که به کمک متدهای

)= همان Extrasمتدهای .اضافه یا ضمیمه کرد Bundleبه کالس مستقیم داده های الزمه را ،intentاشیا

intent هایputextra و(getextra کلید /یک جفت مقدار(key/value pair) کلید .هستند(key) نام برده

،string، Bundleمی توان عالوه بر اشیإ از نوع valueدر رابطه با ،رشته است stringهمیشه از نوع

Parceable وSerializable، از نوع داده های اولیه(primitive data types) از جملهint، float به عنوان(

.مقدار( نیز بهره گرفت

و () getActionقادر است از طریق / با استفاده از متدهای (receiving component)مولفه ی دریافت کننده

getData ()، در شی( به اطالعات مذکور intent object / intentدسترسی پیدا کند ). حال خودintent object

.قابل بازیابی می باشد () getIntentبه وسیله ی متد

داده () getIntent (). getExtrasقادر است با فراخوانی متد ،ی کندموردنظر را دریافت م intentکامپوننتی که

یر با مثال به نمایش گذاشته شده.این امر در تکه کد ز .های اضافی را دریافت کند

Bundle extras = getIntent().getExtras();‎

if (extras == null) {‎

‎ return;‎

‎}‎

‎// get data via the key‎

String value1 = extras.getString(Intent.EXTRA_TEXT);‎

if (value1 != null) {‎

‎ // do something with the data‎

‎}

Page 9: میحرلا نمحرلا للها مسب - tahlildadeh.com android.pdf · 7 دحاو - 561 کلاپ - تارداص کناب بنج - کلم نابايخ زا رت لااب - یتعيرش

7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330

مثال : به اشتراک گذاری اطالعات از طریق(share intent)

به کاربر این امکان را می دهد تا اطالعات یا (android apps) برنامه های کاربردی اندرویدتعداد زیادی از

می توانید .(twitterو Facebook، G+، Gmailداده های دلخواه را با دیگران به اشتراک بگذارد )از قبیل

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

اپلیکیشن با مثال نمایش می دهد. ای را در محیط intentزیر نمونه ای از کاربرد چنین

‎// this runs‎،‎ for example،‎ after a button click‎ Intent intent = new Intent(Intent.ACTION_SEND);‎

intent.setType("text/plain");‎

intent.putExtra(android.content.Intent.EXTRA_TEXT،‎ "News

for you!");‎

startActivity(intent);

بازیابی نتیجه ازsub-activity

را در محیط اندروید با استفاده از دکمه ی برگشت activityهمان طور که مستحضر هستید می توان یک

(back button) متد ،در این مورد .بستfinish () فراخوانی شده که در نتیجه برنامه ی مورد نظر را خاتمه می

،آغاز یا راه اندازی شده باشد startActivity (Intent)ای به وسیله ی متد activityدر صورتی که .دهد

.ای که هم اکنون بسته شده ندارد activityدیگر نیازی به بازخورد یا نتیجه از جانب ( caller)فراخوان

در آن صورت باید ،فراخوانی شود () startActivityForResultبا استفاده از متد activityاما چنانچه

متد ،به پایان می رسد sub-activityپس از این که .به کاربر ارسال گردد sub-activityبازخوردی از جانب

onActivityResult () در(sub-activity فراخوانی می شود )اکنون می توان بر اساس نتیجه دریافتی .مرتبط،

.الزم را انجام داد (actions)عملیات

این امر که در وهله ی اول کدام ،() startActivityForResultدر متد result codeمی توانید با تعریف یک

activity تعیین و شناسایی کنید ،را راه اندازی کردید. result code در حقیقت به شما بازگردانده می باال

قرار دهد که کاربر با استفاده از /تنظیم کند result codeراه اندازی شده نیز قادر است یک activity .شود

.مذکور لغو شده است یا خیر activityآن بتواند دریابد آیا

Page 10: میحرلا نمحرلا للها مسب - tahlildadeh.com android.pdf · 7 دحاو - 561 کلاپ - تارداص کناب بنج - کلم نابايخ زا رت لااب - یتعيرش

7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330

Sub-activity متدfinish () را بکار می برد تا بدین وسیلهintent جدیدی ایجاد کرده و داده های مورد نظر را

یک نتیجه قرار می دهد )اینکه setResult ()، sub-activityهمچنین با فراخوانی متد .داخل آن قرار دهد

.چه خواهد بود( activityنتیجه پس از اتمام

را نشان () startActivityForResultبا استفاده از متد intentنحوه ی فعال سازی و راه اندازی نمونه کد زیر

می دهد.

Page 11: میحرلا نمحرلا للها مسب - tahlildadeh.com android.pdf · 7 دحاو - 561 کلاپ - تارداص کناب بنج - کلم نابايخ زا رت لااب - یتعيرش

7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330

public void onClick(View view) {

Intent i = new Intent(this، ActivityTwo.class);

i.putExtra("Value1"، "This value one for ActivityTwo ");

i.putExtra("Value2"، "This value two ActivityTwo");

// set the request code to any code you like،

// you can identify the callback via this code

startActivityForResult(i، REQUEST_CODE);

}

sub-activityراه اندازی شده دیگر یک startActivityForResult ()، activityدر صورت استفاده از متد

.محسوب می گردد

intentقادر خواهد بود داده ها را از طریق (sub-activity)دیگر ،به پایان می رسد sub-activityپس از اینکه

.صورت می گیرد () finishکلیه ی این عملیات درون متد .برگرداند (caller)به فراخوان

@Override

public void finish() {

// Prepare data intent

Intent data = new Intent();

data.putExtra("returnKey1"، "Swinging on a star. ");

data.putExtra("returnKey2"، "You could be better then you are. ");

// Activity finished ok، return the data

setResult(RESULT_OK، data);

super.finish();

}

Page 12: میحرلا نمحرلا للها مسب - tahlildadeh.com android.pdf · 7 دحاو - 561 کلاپ - تارداص کناب بنج - کلم نابايخ زا رت لااب - یتعيرش

7 واحد - 561 پالک - صادرات بانک جنب - ملک ابانيخ از تر باال - یشريعت خيابان - تهران : آموزشگاه آدرس 88146323 - 88446780 - 88146330

calling)فراخوان activityدر () onActivityResultمتد ،خاتمه می یابد sub-activityبمحض اینکه

activity )صدا زده می شود.

@Override

protected void onActivityResult(int requestCode، int resultCode، Intent data) {

if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {

if (data.hasExtra("returnKey1")) {

Toast.makeText(this، data.getExtras().getString("returnKey1")،

Toast.LENGTH_SHORT).show();

}

}

}