آشنایی با مفهوم اینتنت (Intent) در اندروید

اینتنت (Intent) مانند یک پل بین activity ها است؛ راهی برای فراخوانی یک activity توسط activity دیگر.

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

ساختن یک Intent

برای فراخوانی یک activity دیگر (معمولا در پاسخ به یک رخداد که میتواند یک ورودی انتخاب شده توسط کاربر باشد)، یک شیء Intent بسازید و متد StartActivity را همراه آن فراخوانی کنید:

Intent intent = new Intent(this, ActivityName.class);
startActivity(intent);

اگر میخواهید داده هایی را به activity پاس کنید، از متد putExtra استفاده کنید تا داده ها به صورت زوج های key / value ذخیره کنید:

Intent intent = new Intent(this, ActivityName.class);
intent.putExtra("name", value);
intent.putExtra("name", value);
startActivity(intent);

خواندن داده های ورودی فراخوانی

در activity دوم که فراخوانی شده است، میتوانید داده هایی که به این activity در زمان فراخوانی شده پاس شده است را بخوانید. توسط متد getIntent به ایتنت خود دسترسی پیدا کنید و از طریق متدهایی مانند getExtra, getIntExtra, getStringExtra داده های اضافی پاس شده به خود را بخوانید:

public class SecondActivity extends Activity {
...
  public void onCreate(Bundle savedState) {
    super.onCreate(savedState);
    setContentView(R.layout.activity_second);
    Intent intent = getIntent();
    String extra = intent.getExtra("name");
    ...
    }

درخواست نتیجه فراخوانی

اگر زمان فراخوانی یک activity، به نتیجه آن نیاز داشته باشید، متد startActivityForResult را به جای متد startActivity صدا بزنید. این متد نیازمند یک شماره یکتا (unique ID) است که نشان دهنده فعالیت در حال انجام است (معمولا یک final int constant برای منظور کار تعریف میشود).

فراخوانی متد startActivityForResult منتظر اجرای activity و برگشت نتیجه نمی ماند، بلکه فعالیت را شروع میکند و در انتهای کار رخداد onActivityResult صدا زده می شود

برای چک کردن نتیجه فراخوانی activity، متد onActivityResult را بنویسید که با خاتمه activity فراخوانی شده صدا زده می شود. در ابتدای این متد، پارامتر unique ID که به startActivityForResult پاس کردید را چک کنید و در صورت یکسان بودن مقدار، خروجی را دریافت کنید.

همچنین میتوانید از متدهای setResult و finish برای پایان دادن به کار activity فراخوانی شده استفاده کنید.

نمونه کد برای دریافت نتیجه فراخوانی activity به صورت زیر است:

public class FirstActivity extends Activity {
	private static final int REQ_CODE = 123; // MUST be 0-65535
	public void myOnClick(View view) {
		Intent intent = getIntent(this, SecondActivity.class);
		startActivityForResult(intent, REQ_CODE);
	}
	protected void onActivityResult(int requestCode,
	 int resultCode, Intent intent) {
		super.onActivityResult(requestCode, resultCode, intent);
		if (requestCode == REQ_CODE) {
		// came back from SecondActivity
			String data = intent.getStringExtra("name");
			Toast.makeText(this, "Got back: " + data,
			Toast.LENGTH_SHORT).show();
		}
	}
}

برگرداندن خروجی از اینتنت

برای برگرداندن خروجی به activity فراخوانی کننده، باید یک شیء Intent ایجاد کنید و هر گونه extra data را در آن ذخیره کنید؛ سپس توابع setResult و finish را صدا بزنید.

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

public class SecondActivity extends Activity {
	...
	public void myOnClick(View view) {
		Intent intent = new Intent();
		intent.putExtra("name", value);
		setResult(RESULT_OK, intent);
		finish(); // calls onDestroy
	}
}

اینتنت غیرصریح

اینتنت غیرصریح (implicit intent) به اینتنت ی گفته می شود که برنامه دیگری را باز میکند، بدون اینکه به صورت صریح نام آن اپلیکیشن ذکر شود. این نوع اینتنت برای انجام فعالیت های خاصی مانند شروع تماس تلفنی، باز کردن مرورگر پیش فرض گوشی، یا باز کردن پخش کننده موسیقی گوشی و شروع پخش یک آهنگ مورد استفاده قرار میگیرد.

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

// make a phone call
Uri number = Uri.parse("tel:5551234");
Intent callIntent = new Intent(Intent.ACTION_DIAL, number);

// go to a web page in the default browser
Uri webpage = Uri.parse("http://www.stanford.edu/");
Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);

// open a map pointing at a given latitude/longitude (z=zoom)
Uri location = Uri.parse("geo:37.422219,-122.08364?z=14");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
Was this article helpful?
Dislike 0
قبلی: آموزش فرگمنت (Fragment) در اندروید
بعدی: آموزش طراحی و لایه بندی UI Layout ها در اندروید