میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

انتقال و تبادل اطلاعات بین activity ها و service ها در اندروید

در زمان تعریف یک intent بایستی اطلاعات مرتبط با آن intent را نیز مشخص نمایید. در حقیقت یک intent می تواند دربردارنده ی یک سری اطلاعات پایه ای پیرامون خود باشد همچون اینکه چه عملیاتی باید انجام شود و چه نوع و غیره … برای هر نوع درخواست نیز ممکن است اطلاعات بیشتری نیاز باشد. یک intent می تواند همچنین داده های اضافی در نمونه ای از کلاس (آبجکت) Bundle داشته باشد که به راحتی از طریق متد () getExtras قابل بازیابی است.

شما می توانید داده های اضافی را مستقیما از طریق نسخه های overload شده ی متد () putExtra از آبجکت های Intent (نمونه ای از کلاس) Bundle قرار دهید. داده های اضافی در قالب جفت های کلید/مقدار هستند. کلید همیشه از نوع String است و مقادیر آن را می توانید از نوع داده ای اولیه float ، int و یا آبجکت های از نوع  Serializable و Parceable ،Bundle ،String تنظیم نمایید.

کامپوننت دریافت کننده می تواند به این اطلاعات از طریق توابع () getAction و () getData آبجکت Intent دسترسی داشته باشد. خود آبجکت Intent را نیز می توان از طریق متد () getIntent بازیابی نمود. کامپوننتی که دریافت کننده ی این intent است، می تواند با فراخوانی ()getIntent() . getExtras به داده های اضافی دسترسی داشته باشد. این عملیات در تکه کد زیر به نمایش گذاشته شده است.

 

 

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
}

 


استفاده از intent جهت به اشتراک گذاری اطلاعات

اغلب اپلیکیشن های اندروید این امکان را به شما می دهند تا داده هایی را با کاربران که عضو اپلیکیشن های Gmail ،G+ ،Facebbokو Twitterهستند به اشتراک بگذارید. در واقع می توانید داده های مورد نظر را از طریق آبجکت Intentبه یکی از این کامپوننت ها ارسال کنید. تکه کد زیر روش استفاده از 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);

بازیابی اطلاعات از یک subactivity

یک activity را می توانید با اعمال دکمه ی بازگشت در نمایشگر گوشی خود پایان دهید. با فشردن این دکمه، متد () finish فراخوانی می شود. چنانچه activity مورد نظر با صدا خوردن متد (startActivity(Intent اجرا شده باشد، در آن صورت فراخواننده انتظار بازگشت هیچ نتیجه یا بازخوردی از activity مزبور را ندارد.

اگر activity را با فراخوانی متد () startActivityForResult راه اندازی کرده باشید، در آن صورت subactivity طبق انتظار، نتیجه ای را برمی گرداند. با پایان یافتن ،subactivity متد () onActivityResult در subactivity فرخوانده می شود و شما می توانید عملیاتی را با توجه به نتیجه بازگشتی انجام دهید.

در فراخوانی متد () startActivityForResult شما می توانید کدی ( )resultcode جهت شناسایی activity راه اندازی شده تعریف نمایید. این کد به شما بازگردانده می شود. activity فراخوانده شده نیز می تواند کدی داشته باشد که فراخواننده به کمک آن می تواند تشخیص دهد آیا activity لغو شده یا خیر.

 

subactivity
 

Sub-activity با استفاده از () finish یک intent جدید ایجاد کرده و داده ها را در آن می ریزد.
سپس به واسطه ی فراخوانی متد () setResult نتیجه را تنظیم می کند.

نمونه کد زیر نشان می دهد چگونه با اجرای متد ()startActivityForResult (و ارسال کلاس ایجاد شده از intent به عنوان آرگومان به این متد)، یک intent را فعال و به اصطلاح trigger نمایید.

 

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 راه اندازی شده activity ، را صدا می زنید startActivityForResult()  زمانی که متد خوانده می شود.
هنگامی که subactivity بسته می شود، به دنبالش داده ها را از طریق آبجکت intent به فراخواننده ی خود ارسال می کند. این عملیات داخل بدنه ی () finish پیاده سازی می شود.

 

@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();
}

با بسته شدن یا به پایان رسیدن ،subactivity متد () onActivityResult در سطح کلاس 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();
}
}
}

 


امیدواریم آموزش انتقال و تبادل اطلاعات بین activity ها و service ها در اندروید نیز برای شما مفید واقع شده باشد و ادامه آموزش برنامه نویسی اندروید رو دنبال کنید . برای مطالعه پست‌ها بیشتر ، ما را در مدرسه کدنویسی تلگرام  و یا در تی جوان اینستاگرام دنبال کنید.

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟