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

یک اپلیکیشن اندروید می تواند هیچ اکتیویتی نداشته باشد یا چندین اکتیویتی داشته باشد. زمانیکه اپلیکیشن تان بیش از یک اکتیویتی داشته باشد، نیاز است از یک اکتیویتی به اکتیویتی دیگر حرکت کنید. در اندروید، حرکت بین اکتیویتی
چهارشنبه، 10 تير 1394
تخمین زمان مطالعه:
موارد بیشتر برای شما
آموزش برنامه نویسی برای اندروید با ایکلیپس(25)-ارتباط اکتیویتی ها با استفاده از Intentها
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(25)-ارتباط اکتیویتی ها با استفاده از Intentها

 

مترجم: حبیب الله علیخانی
منبع:راسخون




 

یک اپلیکیشن اندروید می تواند هیچ اکتیویتی نداشته باشد یا چندین اکتیویتی داشته باشد. زمانیکه اپلیکیشن تان بیش از یک اکتیویتی داشته باشد، نیاز است از یک اکتیویتی به اکتیویتی دیگر حرکت کنید. در اندروید، حرکت بین اکتیویتی ها از طریق intent انجام می شود.
در زیر نشان می دهد که چگونه اکتیویتی دیگری به پروژه اضافه کنید و سپس بین دو اکتیویتی حرکت کنید.
1- در ایکلیپس پروژه ای به نام UsingIntent ایجاد کنید.
2- روی فولدر نام پکیج، زیر فولدر src کلیک راست کنید و از منوی باز شده گزینه ی New و سپس Class را انتخاب کنید.

آموزش  برنامه نویسی  برای اندروید با ایکلیپس(25)-ارتباط اکتیویتی ها با استفاده از Intentها
3- نام کلاس را SecondActivity قرار دهید و سپس Finish را کلیک کنید.
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(25)-ارتباط اکتیویتی ها با استفاده از Intentها
4- سپس دستورات زیر که بولد شده(خط 22 تا 30) را در فایل AndroidManifest.xml وارد می کنیم.
1- <?xml version="1.0" encoding="utf-8"?>
2- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3- package="net.rasekhoon.raeesiyan"
4- android:versionCode="1"
5- android:versionName="1.0" >
6-
7- <uses-sdk android:minSdkVersion="8" />
8-
9- <application
10- android:icon="@drawable/ic_launcher"
11- android:label="@string/app_name" >
12- <activity
13- android:name=".UsingIntentActivity"
14- android:label="@string/app_name" >
15- <intent-filter>
16- <action android:name="android.intent.action.MAIN" />
17-
18- <category android:name="android.intent.category.LAUNCHER" />
19- </intent-filter>
20- </activity>
21-
22- <activity
23- android:label="Second Activity"
24- android:name=".SecondActivity" >
25- <intent-filter >
26- <action android:name="net.learn2develop.SecondActivity" />
27-
28- <category android:name="android.intent.category.DEFAULT" />
29- </intent-filter>
30- </activity>
31-
32- </application>
5- وارد دایرکتوری res/layout می شویم و از فایل main.xml یک کپی ایجاد می کنیم. این کار را با کلیک راست روی این فایل و انتخاب گزینه ی copy انجام می دهیم. سپس روی فولدر layout آن را paste می کنیم و نام آن را secondactivity.xml قرار می دهیم:
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(25)-ارتباط اکتیویتی ها با استفاده از Intentها
این فایل جدید مانند زیر ایجاد می شود:
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(25)-ارتباط اکتیویتی ها با استفاده از Intentها
6- فایل secondactivity.xml را تغییر می دهیم: ( در خط 10 مشخصه ی text را تغییر می دهیم که در زیر بولد شده)
1- <?xml version="1.0" encoding="utf-8"?>
2- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3- android:layout_width="fill_parent"
4- android:layout_height="fill_parent"
5- android:orientation="vertical" >
6-
7- <TextView
8- android:layout_width="fill_parent"
9- android:layout_height="wrap_content"
10- android:text="This is the Second Activity!" />
11-
12- </LinearLayout>
7- در فایل SecondActivity.java دستورات زیر که بولد شده، را وارد می کنیم:
1- package net.rasekhoon.raeesiyan;
2-
3- import android.app.Activity;
4- import android.os.Bundle;
5-
6-
7- public class SecondActivity extends Activity {
8-
9- @Override
10- public void onCreate(Bundle savedInstanceState) {
11- super.onCreate(savedInstanceState);
12- setContentView(R.layout.secondactivity);
13- }
14- }
8- دستورات زیر را که بولد شده را در فایل main.xml اضافه می کنیم:
1- <?xml version="1.0" encoding="utf-8"?>
2- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3- android:layout_width="fill_parent"
4- android:layout_height="fill_parent"
5- android:orientation="vertical" >
6-
7- <TextView
8- android:layout_width="fill_parent"
9- android:layout_height="wrap_content"
10- android:text="@string/hello" />
11- <Button
12- android:layout_width="fill_parent"
13- android:layout_height="wrap_content"
14- android:text="Display second activity"
15- android:onClick="onClick"/>
16-
17- </LinearLayout>
9- دستورات زیر که بولد شده(خط های 15 تا 17 و خط 4 و 6) را در فایل UsingIntentActivity.java اضافه می کنیم
1- package net.rasekhoon.raeesiyan;
2-
3- import android.app.Activity;
4- import android.content.Intent;
5- import android.os.Bundle;
6- import android.view.View;
7-
8- public class UsingIntentActivity extends Activity {
9- /** Called when the activity is first created. */
10- @Override
11- public void onCreate(Bundle savedInstanceState) {
12- super.onCreate(savedInstanceState);
13- setContentView(R.layout.main);
14- }
15- public void onClick(View view) {
16- startActivity(new Intent("net.learn2develop.SecondActivity"));
17- }
18- }
سپس این پروژه را در شبیه ساز اندروید اجرا می کنیم. وقتی اولین اکتیویتی لود می شود، روی دکمه ی Display second activity کلیک کنید می بینید که اکتیویتی دوم لود خواهد شد. مانند تصویر زیر:
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(25)-ارتباط اکتیویتی ها با استفاده از Intentها
چگونه کار می کند:
یک اکتیویتی از یک کامپوننت UI (برای مثال main.xml) و یک کامپوننت کلاس(UsingIntentactivity.java) تشکیل شده است. اگر شما می خواهید یک اکتیویتی به پروژه تان اضافه کنید، باید این دو کامپوننت را ایجاد کنید.
در فایل AndroidManifest.xml ،
<activity
android:label="Second Activity"
android:name=".SecondActivity" >
<intent-filter >
<action android:name="net.learn2develop.SecondActivity" />

<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
شما یک اکتیویتی جدید را به اپلیکیشن تان اضافه کرده اید. به نکات زیر توجه کنید:
• نام (کلاس) اکتیویتی جدید SecondActivity است.
• برچسب اکتیویتی Second Activity نام دارد.
• نام فیلتر Intent برای اکتیویتی جدید net.learn2develop.SecondActivity است. اکتیویتی های دیگر که می خواهند این اکتیویتی را فراخوانی کنند آن را از طریق این نام احضار می کنند. به طور ایده آل، شما باید برعکس نام دامین شرکت خودتان را به عنوان نام فیلتر Intent استفاده کنید تا شانس اینکه اپلیکیشن های دیگر از این نام استفاده کنند کمتر باشد. (در بخش بعدی در باره ی این که دو یا چند اپلیکیشن دارای فیلتر Intent یکسان داشته باشند، بحث می کنیم).
• دسته برای این فیلتر Intent ، android.intent.category.DEFAULT است. شما باید این را به فیلتر Intent اضافه کنید بطوریکه این اکتیویتی بتواند بوسیله ی اکتیویتی دیگر با استفاده از متد startActivity() شروع شود.
زمانیکه دکمه کلیک شود، از متد startActivity() برای نمایش secondActivity بوسیله ی یک نمونه از کلاس Intent استفاده می کنید و نام فیلتر Intent ، SecondActivity را به آن پاس می دهید(که net.learn2develop.SecondActivity است).

 

public void onClick(View view) {
startActivity(new Intent(“net.learn2develop.SecondActivity”));
}
اکتیویتی ها در اندروید می توانند بوسیله ی هر اپلیکیشن در حال اجرا روی وسایل احضار شوند. برای مثال، شما می توانید یک پروژه ی اندرویدی جدید ایجاد کنید و سپس (با استفاده از فیلتر Intent ، net.learn2develop.SecondActivity ) SecondActivity را نمایش دهید. این یکی از مفاهیم ابتدایی در اندروید است که اپلیکیشن را قادر می سازد تا به سادگی دیگری را احضار کند.
اگر اکتیویتی که شما می خواهید احضار کنید در داخل همان پروژه باشد، می توانید دستور زیر را بازنویسی کنید:
startActivity(new Intent(this, SecondActivity.class));
به هر حال، این روش فقط زمانی قابل اجرا است که اکتیویتی ای که شما می خواهید نمایش دهید در داخل همان پروژه باشد همانند اکتیویتی جاری.
رفع برخورد فیلتر Intent
در بخش قبلی، شما یاد گرفتید که عنصر <intent-filter> مشخص می کند که چگونه اکتیویتی تان می تواند توسط اکتیویتی دیگر احضار می شود. وقتی که اکتیویتی دیگری با همین نام فیلتر وجود داشته باشد(در همان اپلیکیشن یا اپلیکیشن دیگر)، چه اتفاقی می افتد؟
برای مثال، فرض کنید اپلیکیشن شما اکتیویتی دیگری به نام Activity3 داشته باشد، که در فایل AndroidManifest.xml آن دستورات زیر باشد:
1- <?xml version="1.0" encoding="utf-8"?>
2- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3- package="net.rasekhoon.raeesiyan"
4- android:versionCode="1"
5- android:versionName="1.0" >
6-
7- <uses-sdk android:minSdkVersion="8" />
8-
9- <application
10- android:icon="@drawable/ic_launcher"
11- android:label="@string/app_name" >
12- <activity
13- android:name=".UsingIntentActivity"
14- android:label="@string/app_name" >
15- <intent-filter>
16- <action android:name="android.intent.action.MAIN" />
17-
18- <category android:name="android.intent.category.LAUNCHER" />
19- </intent-filter>
20- </activity>
21- <activity
22- android:label="Second Activity"
23- android:name=".SecondActivity" >
24- <intent-filter >
25- <action android:name="net.learn2develop.SecondActivity" />
26-
27- <category android:name="android.intent.category.DEFAULT" />
28- </intent-filter>
29- </activity>
30- <activity
31- android:label="Third Activity"
32- android:name=".ThirdActivity" >
33- <intent-filter >
34- <action android:name="net.learn2develop.SecondActivity" />
35-
36- <category android:name="android.intent.category.DEFAULT" />
37- </intent-filter>
38-
39- </activity>
40-
41- </application>
42-
43- </manifest>
اگر شما متد startActivity() را با intent زیر فراخوانی کنید، سپس سیستم عامل اندروید یک دسته از انتخاب از اکتیویتی را نمایش می دهد، مانند تصویر زیر:
startActivity(new Intent(“net.learn2develop.SecondActivity”));
اگر شما تیک گزینه ی “Use by default for this action” را بزنید و یک اکتیویتی را انتخاب کنید، Intent آنها یعنی “net.learn2develop.SecondActivity” دوباره فراخوانی می شود، این کار اکتیویتی قبلی را که انتخاب کرده بودید را اجرا می کند.
برای پاک کردن این پیش فرض، به تنظیمات اپلیکیشن در اندروید بروید و ب صورت زیر عمل کنید:
Apps ➪ Manage applications
و سپس نام اپلیکیشن را انتخاب کنید. مانند تصویر زیر:
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(25)-ارتباط اکتیویتی ها با استفاده از Intentها
زمانیکه جزئیات اپلیکیشن را نمایش می دهد، به سمت پایین اسکرول کنید و دکمه ی Clear default را کلیک کنید:
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(25)-ارتباط اکتیویتی ها با استفاده از Intentها

 

متد startActivity() اکتیویتی دیگر را احضار می کند اما نتیجه ای برای اکتیویتی جاری برنمی گرداند. برای مثال، اکتیویتی ای دارید که برای دریافت نام کاربری و رمز عبور به کاربر اعلان می کند. اطلاعات ورودی توسط کاربر در آن اکتیویتی باید برای پردازش بیشتر به اکتیویتی فراخواننده باز گردد. اگر نیاز به بازگشت اطلاعات از یک اکتیویتی داشته باشید، باید در عوض از متد startActivityForResult() استفاده کنید. در ادامه به این می پردازد.
کسب یک نتیجه از یک اکتیویتی
1- از همان پروژه ای که در بخش قبل ساخته اید استفاده کنید و دستورات زیر که بولد شده اند(11 تا 24) را به فایل secondactivity.xml اضافه کنید:

1- <?xml version="1.0" encoding="utf-8"?>
2- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3- android:layout_width="fill_parent"
4- android:layout_height="fill_parent"
5- android:orientation="vertical" >
6-
7- <TextView
8- android:layout_width="fill_parent"
9- android:layout_height="wrap_content"
10- android:text="This is the Second Activity!" />
11- <TextView
12- android:layout_width="fill_parent"
13- android:layout_height="wrap_content"
14- android:text="Please enter your name" />
15- <EditText
16- android:id="@+id/txt_username"
17- android:layout_width="fill_parent"
18- android:layout_height="wrap_content" />
19- <Button
20- android:id="@+id/btn_OK"
21- android:layout_width="fill_parent"
22- android:layout_height="wrap_content"
23- android:text="OK"
24- android:onClick="onClick"/>
25-
26- </LinearLayout>
2- همچنین دستورات بولد شده ی زیر(خطوط 20 تا 30 و خط 4و5و7و8 ) را به فایل SecondActivity.java اضافه کنی
1- package net.rasekhoon.raeesiyan;
2-
3- import android.app.Activity;
4- import android.content.Intent;
5- import android.net.Uri;
6- import android.os.Bundle;
7- import android.view.View;
8- import android.widget.EditText;
9-
10-
11- public class SecondActivity extends Activity {
12-
13- @Override
14- public void onCreate(Bundle savedInstanceState) {
15- super.onCreate(savedInstanceState);
16- setContentView(R.layout.secondactivity);
17- }
18-
19-
20- public void onClick(View view) {
21- Intent data = new Intent();
22- //---get the EditText view---
23- EditText txt_username =
24- (EditText) findViewById(R.id.txt_username);
25- //---set the data to pass back---
26- data.setData(Uri.parse(txt_username.getText().toString()));
27- setResult(RESULT_OK, data);
28- //---closes the activity---
29- finish();
30- }
31- }
3- دستورات بولد شده ی(خطوط) زیر را به فایل UsingIntentActivity.java اضافه کنید:
1- package net.rasekhoon.raeesiyan;
3- import android.app.Activity;
4- import android.content.Intent;
5- import android.os.Bundle;
6- import android.view.View;
7- import android.widget.Toast;
8-
9- public class UsingIntentActivity extends Activity {
10-
11- int request_Code = 1;
12-
13- /** Called when the activity is first created. */
14- @Override
15- public void onCreate(Bundle savedInstanceState) {
16- super.onCreate(savedInstanceState);
17- setContentView(R.layout.main);
18- }
19- public void onClick(View view) {
20- //startActivity(new Intent(“net.learn2develop.SecondActivity”));
21- //or
22- //startActivity(new Intent(this, SecondActivity.class));
23- startActivity(new Intent("net.learn2develop.SecondActivity"));
24- startActivityForResult(new Intent(
25- "net.learn2develop.SecondActivity"),
26- request_Code);
27- }
28-
29- @Override
30- public void onActivityResult(int requestCode, int resultCode, Intent data)
31- {
32- if (requestCode == request_Code) {
33- if (resultCode == RESULT_OK) {
34- Toast.makeText(this, data.getData().toString(),
35- Toast.LENGTH_SHORT).show();
36- }
37- }
38- }
39- }
4- سپس این پروژه را در شبیه ساز اندروید اجرا کنید. زمانیکه اکتیویتی اول لود می شود، دکمه را کلیک کنید. SecondActivity لود خواهد شد. نام خود را وارد کنید(تصویر زیر) و دکمه ی Ok را کلیک کنید. اکتیویتی اول نامی را که وارد کرده اید را با استفاده از کلاس Toast نمایش می دهد.
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(25)-ارتباط اکتیویتی ها با استفاده از Intentها
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(25)-ارتباط اکتیویتی ها با استفاده از Intentها
وارد قسمت مورد نظر چیزی می نویسیم(با کیبورد شبیه ساز)
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(25)-ارتباط اکتیویتی ها با استفاده از Intentها
پس از زدن دکمه ی ok برای یک لحظه پایین می نویسد rasekhoon
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(25)-ارتباط اکتیویتی ها با استفاده از Intentها
چگونه کار می کند:
برای فراخوانی یک اکتیویتی و انتظار برای یک نتیجه ای که برمی گرداند، باید از متد startActivityForResult() استفاده کنید مانند زیر:
startActivityForResult(new Intent(“net.learn2develop.SecondActivity”), request_Code);
علاوه بر پاس دادن به یک شی Intent نیاز به پاس دادن request_Code(کد درخواست) دارید. request_Code در واقع یک مقدار صحیح است که برای شناسایی اکتیویتی که شما فراخوانی می کنید، بکار می رود. این مورد نیاز است زمانیکه یک اکتیویتی یک مقدار بر می گرداند شما باید راهی برای شناسایی آن داشته باشید. برای مثال، شما ممکن است چندین اکتیویتی همزمان داشته باشید و بعضی از اکتیویتی ها ممکن است فورا بازگشت نکند(برای مثال، در انتظار پاسخ از سرور). هنگامیکه یک اکتیویتی بر می گردد، برای تعیین اینکه کدام اکتیویتی واقعا برگشت به این کد درخواست()نیاز دارید.
نکته: اگر کد درخواست را 1- قرار دهیم، سپس فراخوانی آن با استفاده از متد ()startActivityForResult معادل فراخوانی آن با استفاده از متد ()startActivity است. این است که هیچ نتیجه ای بر نخواهد گشت.
برای یک اکتیویتی برای برگرداندن یک مقدار به فراخوانی اکتیویتی، از یک شی Intent برای ارسال داده ی بازگشتی از طریق متد setData() استفاده می کنید.
Intent data = new Intent();
//---get the EditText view---
EditText txt_username =
(EditText) findViewById(R.id.txt_username);
//---set the data to pass back---

 

data.setData(Uri.parse(txt_username.getText().toString()));
setResult(RESULT_OK, data);
//---closes the activity---
finish();
متد setResult() یک کد نتیجه(result code) قرا می دهد(Result_OK یا Result_CANCELLED) و data(یک شی Intent) به اکتیویتی فراخواننده برگردانده می شود. متد finish() اکتیویتی را می بندد و بازگشتی کنترل را به اکتیویتی فراخواننده برمی گرداند.
در اکتیویتی فراخواننده، باید متد onActivityResult() را پیاده سازی کنید، که این متد هر زمانی که اکتیویتی بازگشت فراخوانی می شود.
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == request_Code) {
if (resultCode == RESULT_OK) {
Toast.makeText(this, data.getData().toString(),
Toast.LENGTH_SHORT).show();
}
}
}

اکنون، برای درخواست مناسب و کد نتیجه و نمایش نتیجه و نتیجه ای که بر می گرداند امتحان کنید. نتجه ی بازگشتی از طریق آرگومان data پاس داده می شود و شما جزئیات آن را از طریق متد getData() بدست می آورید.
پاس دادن Data از طریق یک شی Intent
علاوه بر بازگشت داده از یک اکتیویتی، پاس دادن داده به یک اکتیویتی یک امری عادی است. برای مثال، در مثال قبلی شما ممکن است بخواهید برخی متن پیشفرض در ویرایشگر متن را قبل از اینکه نمایش داده شود، تنظیم کنید. در این مورد، شما ممکن است از شی Intent برای پاس دادن داده به آکتیویتی مورد نظر استفاده کنید.
در ادامه می خواهیم به شما نشان دهیم که روشهای مختلفی وجود دارد که شما می تونید داده را بین اکتیویتی ها پاس دهید.
پاس دادن داده به اکتیویتی مورد نظر
1- یک پروژه ی اندرویدی جدید در ایکلیپس ایجاد کنید و نام آن را PassingData قرار دهید.
2- دستورات زیر (11 تا 16) را بولد شده اند را به فایل main.xml آن اضافه کنید:
1- <?xml version="1.0" encoding="utf-8"?>
2- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3- android:layout_width="fill_parent"
4- android:layout_height="fill_parent"
5- android:orientation="vertical" >
6-
7- <TextView
8- android:layout_width="fill_parent"
9- android:layout_height="wrap_content"
10- android:text="@string/hello" />
11- <Button
12- android:id="@+id/btn_SecondActivity"
13- android:layout_width="fill_parent"
14- android:layout_height="wrap_content"
15- android:text="Click to go to Second Activity"
16- android:onClick="onClick"/>
17-
18- </LinearLayout>
3- از طریق آیکن زیر صفحه جدیدی باز کنید و فایل xml جدیدی به نام secondactivity.xml در پوشه ی res/layout ایجاد کنید. دستورات زیر را در آن وارد کنید:
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(25)-ارتباط اکتیویتی ها با استفاده از Intentها
1- <?xml version="1.0" encoding="utf-8"?>
2- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3- android:layout_width="fill_parent"
4- android:layout_height="fill_parent"
5- android:orientation="vertical" >
6- <TextView
7- android:layout_width="fill_parent"
8- android:layout_height="wrap_content"
9- android:text="Welcome to Second Activity" />
10- <Button
11- android:id="@+id/btn_MainActivity"
12- android:layout_width="fill_parent"
13- android:layout_height="wrap_content"
14- android:text="Click to return to main activity"
15- android:onClick="onClick"/>
16- </LinearLayout>
4- یک فایل کلاس جدید در پکیج اضافه کنید و نام آن را SecondActivity.java قرار دهید و دستورات زیر را در آن وارد کنید:
1- package net.Rasekhoon.raeesiyan;
2-
3- import android.app.Activity;
4- import android.content.Intent;
5- import android.net.Uri;
6- import android.os.Bundle;
7- import android.view.View;
8- import android.widget.Toast;
9-
10-
11- public class SecondActivity extends Activity {
12-
13- @Override
14- public void onCreate(Bundle savedInstanceState) {
15- super.onCreate(savedInstanceState);
16- setContentView(R.layout.secondactivity);
17- //---get the data passed in using getStringExtra()---
18- Toast.makeText(this, getIntent().getStringExtra("str1"),
19- Toast.LENGTH_SHORT).show();
20- //---get the data passed in using getIntExtra()---
21- Toast.makeText(this, Integer.toString(
22- getIntent().getIntExtra("age1", 0)),
23- Toast.LENGTH_SHORT).show();
24- //---get the Bundle object passed in---
25- Bundle bundle = getIntent().getExtras();
26- //---get the data using the getString()---
27- Toast.makeText(this, bundle.getString("str2"),
28- Toast.LENGTH_SHORT).show();
29- //---get the data using the getInt() method---
30- Toast.makeText(this, Integer.toString(bundle.getInt("age2")),
31- Toast.LENGTH_SHORT).show();
32- }
33-
34-
35- public void onClick(View view) {
36- //---use an Intent object to return data---
37- Intent i = new Intent();
38- //---use the putExtra() method to return some
39- // value---
40- i.putExtra("age3", 45);
41- //---use the setData() method to return some value---
42- i.setData(Uri.parse(
43- "Something passed back to main activity"));
44- //---set the result with OK and the Intent object---
45- setResult(RESULT_OK, i);
46- //---destroy the current activity---
47- finish();
48- }
49- }
5- دستورات زیر (22 تا 30) که بولد شده را در فایل AndroidManifest.xml اضافه کنید:
1- <?xml version="1.0" encoding="utf-8"?>
2- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3- package="net.Rasekhoon.raeesiyan"
4- android:versionCode="1"
5- android:versionName="1.0" >
6-
7- <uses-sdk android:minSdkVersion="8" />
8-
9- <application
10- android:icon="@drawable/ic_launcher"
11- android:label="@string/app_name" >
12- <activity
13- android:name=".PassingDataActivity"
14- android:label="@string/app_name" >
15- <intent-filter>
16- <action android:name="android.intent.action.MAIN" />
17-
18- <category android:name="android.intent.category.LAUNCHER" />
19- </intent-filter>
20- </activity>
21-
22- <activity
23- android:label="Second Activity"
24- android:name=".SecondActivity" >
25- <intent-filter >
26- <action android:name="net.learn2develop.PassingDataSecondActivity" />
27-
28- <category android:name="android.intent.category.DEFAULT" />
29- </intent-filter>
30- </activity>
31-
32- </application>
33-
34- </manifest>
6- دستورات زیر را وارد فایل PassingDataActivity.java کنید:
1- package net.Rasekhoon.raeesiyan;
2-
3- import android.app.Activity;
4- import android.content.Intent;
5- import android.os.Bundle;
6- import android.view.View;
7- import android.widget.Toast;
8-
9-
10- public class PassingDataActivity extends Activity {
11-
12- /** Called when the activity is first created. */
13- @Override
14- public void onCreate(Bundle savedInstanceState) {
15- super.onCreate(savedInstanceState);
16- setContentView(R.layout.main);
17- }
18-
19-
20- public void onClick(View view) {
21- Intent i = new
22- Intent("net.learn2develop.PassingDataSecondActivity");
23- //---use putExtra() to add new name/value pairs---
24- i.putExtra("str1", "This is a string");
25- i.putExtra("age1", 25);
26- //---use a Bundle object to add new name/values
27- // pairs---
28- Bundle extras = new Bundle();
29- extras.putString("str2", "This is another string");
30- extras.putInt("age2", 35);
31- //---attach the Bundle object to the Intent object---
32- i.putExtras(extras);
33- //---start the activity to get a result back---
34- startActivityForResult(i, 1);
35- }
36-
37-
38- @Override
39- public void onActivityResult(int requestCode,
40- int resultCode, Intent data)
41- {
42- //---check if the request code is 1---
43- if (requestCode == 1) {
44- //---if the result is OK---
45- if (resultCode == RESULT_OK) {
46- //---get the result using getIntExtra()---
47- Toast.makeText(this, Integer.toString(
48- data.getIntExtra("age3", 0)),
49- Toast.LENGTH_SHORT).show();
50- //---get the result using getData()---
51- Toast.makeText(this, data.getData().toString(),
52- Toast.LENGTH_SHORT).show();
53- }
54- }
55- }
56- }
7- سپس پروژه را اجرا کنید. روی دکمه ی هر اکتیویتی کلیک کنید، مقادیری را نشان می دهد:
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(25)-ارتباط اکتیویتی ها با استفاده از Intentها
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(25)-ارتباط اکتیویتی ها با استفاده از Intentها
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(25)-ارتباط اکتیویتی ها با استفاده از Intentها
چگونه کار می کند:
هرچند این اپلیکیشن به طور بصری هیجان انگیز نیست، اما برخی از روش های مهم پاس دادن داده بین اکتیویتی ها را نشان می دهد.
ابتدا، شما می توانید از متد putExtra() از یک شی Intent برای اضافه کردن یک جفت مقدار و نام استفاده کنید:
//---use putExtra() to add new name/value pairs---
i.putExtra(“str1”, “This is a string”);
i.putExtra(“age1”, 25);
در دستورات قبل شما دو جفت مقدار/نام به شی Intent اضافه کرده اید: یکی نوع رشته و دیگری نوع صحیح.
درکنار استفاده از متد putExtra()، شما می توانید یک شی Bundle ایجاد کنید و آن را به متد putExtras() نسبت دهید. شی Bundle به عنوان یک دیکشنری شی است که شامل یک مجموعه از نام/مقدار می شود. سپس به شی Intent نسبت داده می شود.
//---use a Bundle object to add new name/values pairs---
Bundle extras = new Bundle();
extras.putString(“str2”, “This is another string”);
extras.putInt(“age2”, 35);
//---attach the Bundle object to the Intent object---
i.putExtras(extras);
در اکتیویتی secondactivity، برای بدست آوردن داده ی فرستاده شده توسط شی Intent، ابتدا شما شی Intent را با استفاده از متد getIntent() بدست می آورید و سپس متد getStringExtra() آنرا برای بدست آوردن مقدار رشته (که توسط متد putExtra() تنظیم شده) فراخوانی می کنید:
//---get the data passed in using getStringExtra()---
Toast.makeText(this,getIntent().getStringExtra(“str1”),
Toast.LENGTH_SHORT).show();
در این مورد، شما باید متد مناسب را برای استخراج جفت نام/مقدار را بر اساس نوع مجموعه داده فراخوانی کنید. برای مقدار صحیح، از متد getIntExtra() استفاده کنید(آرگومان دوم مقدار پیشفرض در موردی که هیچ مقداری در نام مشخص ذخیره نشده است):
//---get the data passed in using getIntExtra()---
Toast.makeText(this,Integer.toString(
getIntent().getIntExtra(“age1”, 0)),
Toast.LENGTH_SHORT).show();
برای بازیابی مقدار شی Bundle، از متد getExtras() استفاده کنید:
//---get the Bundle object passed in---
Bundle bundle = getIntent().getExtras();
برای دریافت جفت نام/مقدار از متد مناسب استفاده کنید. برای مقدار رشته ای از متد getString() استفاده کنید:
//---get the data using the getString()---
Toast.makeText(this, bundle.getString(“str2”),
Toast.LENGTH_SHORT).show();
به همین ترتیب، برای بازیابی مقدار صحیح از متد getInt() استفاده کنید:
//---get the data using the getInt() method---
Toast.makeText(this,Integer.toString(bundle.getInt(“age2”)),
Toast.LENGTH_SHORT).show();
روش دیگر برای پاس دادن داده به اکتیویتی استفاده از متد setData() است، (مثلا هنگام استفاده در بخش قبل)مانند زیر:
//---use the setData() method to return some value---
i.setData(Uri.parse(
“Something passed back to main activity”));
معمولا شما برای قرار دادن داده بر روی یک شی Intent ای که می خواهید عملیات انجام دهد،از متد setData() استفاده می کنید(مانند ارسال URL به یک شی Intent به طوریکه می تواند یک مرورگر وب را احضار کند تا یک صفحه ی وب را نمایش دهد).
برای بازیابی مجموعه داده با استفاده از متد setData()، از متد getData() استفاده کنید(در این مثال data یک شی Intent است)
//---get the result using getData()---
Toast.makeText(this, data.getData().toString(),
Toast.LENGTH_SHORT).show();
استفاده از مطالب این مقاله با ذکر نام راسخون بلامانع است.

 




 

 



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