آموزش اندروید-دریافت نتایج
آن چه در این آموزش فرا می گیرید:
مواردی که باید مطالعه کرده باشید:
- به اشتراک گذاری فایل ها
- به اشتراک گذاری داده ها
آموزش اندروید - دریافت نتایج از Activity
شروع یک برنامه لازم نیست که یک طرفه باشد. می توانید یک activiy دیگر را اجرا کنید و نتیجه را از آن برنامه دریافت کنید، برای دریافت نتیجه متد ()startActivityForResult را فراخوانی نمایید. (به جای ()startActivity).
برای نمونه، برنامه ی شما می تواند دوربین را راه اندازی کند و عکس های گرفته شده را به عنوان نتیجه دریافت کند. یا، می توانید برنامه ی مخاطبین را به منظور انتخاب یک تماس شروع کرد و جزییات تمای به عنوان نتیجه دریافت شود.
دقت نمایید که Activity که پاسخ می دهد می بایست طوری طراحی شده باشد که نتیحه را برگرداند. اگر این طور طراحی شده باشد، نتیجه را به عنوان یک شیء intent دیگر صدا می زند. برنامه ی شما Intent را با استفاده از متد ()onActivityResult دریافت می کند.
توجه: وقتی که از متد ()startActivityForResult استفاده می کنید می توانید از intentهای implicit یا explicit استفاده کنید. وقتی که یکی از Activityهایتان را برای دریافت نتیجه راه اندازی کردید، می بایست از Explicit intent برای تضمین دریافت نتیجه ی مورد انتظار استفاده کنید.
شروع یک activity
مطلب اضافه تری در مورد شیء Intent که در برگرداندن نتیجه ی activity استفاده می شود وجود ندارد، اما می بایست یک عدد صحیح اضافه تر به عنوان آرگومان به متد ()startActivityForResult ارسال کنیم.
این آرگومان صحیح یک "کد درخواست" می باشد که برای شناسایی درخواست به کار می رود. موقعی که نتیجه را دریافت می کنید، متد پاسخ نیز همان کد را به عنوان نتیجه بر می گرداند، بنابراین برنامه می تواند به درستی نتیجه را شناسایی کند و نحوه ی مدیریت آن را تشخیص دهد.
برای مثال، در زیر یک نحوه ی شروع یک activity را می بینید که به کاربر اجازه می دهد یک مخاطب را انتخاب کند:
شروع یک Activity
staticfinalint PICK_CONTACT_REQUEST =1; // The request code
...
privatevoid pickContact(){
Intent pickContactIntent =newIntent(Intent.ACTION_PICK,Uri.parse("content://contacts"));
pickContactIntent.setType(Phone.CONTENT_TYPE);// Show user only contacts w/ phone numbers
startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
}
دریافت نتیجه
وقتی کاربر با Activity جدید کارش تمام شد و به برنامه برگشت ، سیستم متد ()onActivityResult مربوط به activity شما را اجرا می کند. این متد حاوی سه آرگومان می باشد:
- کد درخواستی که شما به ()startActivityForResult ارسال کردید.
- کد درخواستی که توسط Activity دوم مشخص شد. این کد می تواند مقادیر RSULTT_OK باشد که نشان می دهد عملیات موفق بوده است یا می تواند مقدار RESULT_CANCELED باشد که در صورتی که کاربر به برنامه برگردد یا به هر دلیل دیگری عملیات با شکست مواجه شود، این مقدار بر می گردد.
- یک Intent که داده های خروجی را انتقال می دهد.
برای مثال، در زیر نحوه ی مدیریت نمایش را برای intentی که "یک مخاطب" را درخواست می کند آورده شده است:
درخواست یک مخاطب
@Override
protectedvoid onActivityResult(int requestCode,int resultCode,Intent data){
// Check which request we're responding to
if(requestCode == PICK_CONTACT_REQUEST){
// Make sure the request was successful
if(resultCode == RESULT_OK){
// The user picked a contact.
// The Intent's data Uri identifies which contact was selected.
// Do something with the contact here (bigger example below)
}
}
}
در این مثال، Intent نتیجه توسط برنامه ی مخاطبین اندروید برگشت می شود. این Intent حاوی یک Uri است که مخاطبی را کاربر انتخاب کرده مشخص می کند.
برای اینکه نتیجه با موفقیت مدیریت شود، می بایست فرمت Intent نتیجه را شناخت. وقتی که activity که نتیجه را بر می گرداند نیز یکی از Activityهای شما باشد، شناخت این فرمت بسیار آسان است. برنامه هایی که در پلاتفرم اندروید هستند نیز api مخصوص خودشان را استفاده می کنند و می توانید روی آن ها برای تنایج خاص حساب باز کنید. برای نمونه، برنامه ی مخاطبین هموراه نتیجه را به صورت URIی که مخاطب انتخاب شده را مشخص می کند بر می گرداند، و برنامه ی دوربین نیز تصاویر را در داده ی extra ارسال می کنند.
Bonus: Read the contact data
کد بالا نحوه ی دریافت نتیجه را از برنامه ی مخاطبین نشان می دهد. این کد وارد جزییات خواندن نتیجه نمی شود زیرا نیاز به مباحث پیشرفته در این زمینه می باشد. با این وجود، اگر کنجکاو هستید در مورد این کدها بدانید، کدهای بیشتری وجود دارد که نحوه ی پرس و جوی داده های نتیجه برای دریافت شماره تلفن مخاطب را نشان می دهد.
نحوه ی نمایش اطلاعات تماس
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
// Check which request it is that we're responding to
if(requestCode == PICK_CONTACT_REQUEST){
// Make sure the request was successful
if(resultCode == RESULT_OK){
// Get the URI that points to the selected contact
Uri contactUri = data.getData();
// We only need the NUMBER column, because there will be only one row in the result
String[] projection ={Phone.NUMBER};
// Perform the query on the contact to get the NUMBER column
// We don't need a selection or sort order (there's only one result for the given URI)
// CAUTION: The query() method should be called from a separate thread to avoid blocking
// your app's UI thread. (For simplicity of the sample, this code doesn't do that.)
// Consider usingCursorLoader
to perform the query.
Cursor cursor = getContentResolver()
.query(contactUri, projection,null,null,null);
cursor.moveToFirst();
// Retrieve the phone number from the NUMBER column
int column = cursor.getColumnIndex(Phone.NUMBER);
String number = cursor.getString(column);
// Do something with the phone number...
}
}
}
توجه: قبل از نسخه 2.3 (api 9)، اجرای پرس و جو روی Contacts Provider (مانند کد بالا) نیازمند این بود که کاربر مجوز READ_CONTACTS را داشته باشد. با این وجود، از اندروید 2.3 به بعد، برنامه ی مخاطبین به برنامه ی شما یک مجوز موقت می دهد تا از Contacts Provider بخواند. مجوز موقت تنها روی مخاطب درخواست شده اعمال می شود، بنابراین نمی توان پرس و جویی را روی مخاطبینی به جز آن چه در Uri مشخص شده است اجرا کرد، مگر اینکه مجوز READ_CONTACTS داشته باشید. |
- نوشته شده توسط مظاهر نصوحی
- بازدید: 8507