31 – الحصول على نتيجة من فعالية Getting a Result from an Activity

ملاحظة : الموضوع عبارة عن حلقة من حلقات سلسلة برمجة وتطوير اندرويد Android Development

اندرويد : الحصول على نتيجة من فعالية Getting a Result from an Activity

السلام عليكم ورحمة الله وبركاته

سوف نتعلم في هذا الدرس الامور التالية :

  • تشغيل فعالية Start the Activity
  • تلقي النتيجة Receive the Result

يفضل قراءة :

لا يتوجب ان تكون عملية تشغيل فعالية ما عملية باتجاه وحيد one-way. بإمكانك ايضا ان تقوم بتشغيل فعالية اخرى وان تتلقى نتيجة ما منها.

لكي تتلقى نتيجة, استدعي التابع startActivityForResult() (بدلا من استدعاء التابع ) startActivity().

على سبيل المثال, بإمكان تطبيقك ان يقوم بتشغيل تطبيق كاميرا, ويتلقى من ذاك التطبيق الصورة التي يتم التقاطها كنتيجة. او من الممكن ان ان تقوم بتشغيل تطبيق People app وذلك لكي يختار المستخدم احد السجلات التابعة للاشخاص contact وسوف يتلقى تطبيقك تفاصيل حساب هذا الشخص كنتيجة.

طبعا, الفعالية التي سوف تستجيب يجب ان تكون مصممة لكي ترد نتيجة. عندما تكون كذلك, فإنها ترسل النتيجة على شكل غرض intent اخر.تتلقى فعاليتك هذه ال Intent عبر الاستدعاء onActivityResult().

ملاحظة : بإمكانك ان تستخدم ال Intents  الصريحة او الضمنية عند استدعاء التابع startActivityForResult().عندما تقوم بتشغيل احد فعالياتك لتستقبل نتيجة ما, يتوجب عليك استخدام ال intent الصريحة لكي تتاكد من تلقيك النتيجة المتوقعة.

تشغيل الفعالية Start the Activity

لا يوجد شيء مميز يخص غرض intent عندما تستخدمه بهدف تشغيل فعالية مع انتظار النتيجة, ولكنك  بحاجة لتمرير معاملات ذات قيم صحيحة اخر إلى التابع startActivityForResult().

إن القيمة الصحيحة عبارة عن “request code” “ترميز الطلب” والتي تحدد وتميز طلبك. عندما تتلقى ال intent   النتيجة, فإن الاستدعاء يزودك بنفس ترميز الطلب “request code” وبذلك فإن تطبيقك يستطيع ان يحدد النتيجة وكيفية التعامل معها.

على سبيل المثال, فيما يلي نوضح كيف بإمكانك تشغيل فعالية تسمح للمستخدم باختيار ال contact:

static final int PICK_CONTACT_REQUEST = 1;  // The request code
...
private void pickContact() {
    Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts"));
    pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers
    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
}

تلقي واستقبال النتيجة Receive the Result

ما إن ينتهي المستخدم من الطلب الجزئي للفعالية , حتى يستدعي النظام التابع onActivityResult() الخاص بفعاليتك. يتضمن هذا التابع 3 معاملات :

  • ترميز الطلب Request code  الذي قمت بتمريره للتابع startActivityForResult().
  • ترميز النتيجة result code المحدد من قبل الفعالية الثانية.وهو اما عبارة عن RESULT_OKفي حال كانت العملية ناحجة أو RESULT_CANCELEDفي حال فشلت العملية لسبب من الاسباب.
  • ال intent التي تحمل معطيات النتيجة.

على سبيل المثال, فيما يلي مثال يوضح لك كيف بإمكانك التعامل مع النتيجة وذلك فيما يخص مثال  intent الخاصة بحدث “pick a contact”  :

@Override
protected void 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 النتيجة المعادة من قبل تطبيقك Contacts or People app تزودنا ب Uriتميز وتحدد ال contact الذي قام المستخدم باختياره.

لكي تنعامل بنجاح مع النتيجة , يجب عليك فهم بنية وهيكلية ال Intent  النتيجة.  تلك العملية عبارةعن عملية سهلة جدا وذلك في حال كانت الفعالية التي تعيد النتيجة هي احد فعالياتك. اما بقية التطبيقات المضمنة ضمن منصة عمل اندرويد فهي تزونا بالواجهات APIs الخاصة بها والتي تستطيع ان تعتمدعليها فيما يخص المعطيات الخاصة بنتيجة معينة.

على سبيل المثال, في People app (تطبيق معلومات الاتصال على بعض النسخ القديمة من النظام) دوما تعيد النتيجة مع URI الذي يحدد ال contact الذي تم اختياره, وفي تطبيق الكاميرا Camera app فإنها تعيد Bitmap  ضمن المعطيات الاضافية “data” extra .(بالامكان الاطلاع على الصف ذو العلاقة ب Capturing Photos).

قراءة بيانات ال Contact

إن الترميز اعلاه الذي يتحدث عن كيفية احضار النتيجة من تطبيق People app لا يخوض في تفاصيل آلية قراءة المعطيات من النتيجة, وذلك لأنه يتطلب الميزد من النقاش المتقدم حول content providers.على كل الاحوال, في حال كنت شخص فضولي , فيما يلي المزيد من الرماز الذي يبين كيفية الاستعلام عن معطيات النتيجة للحصول على رقم الهاتف من الcontact  الذي تم اختياره:

إلى لقاء قريب في الحلقة القادمة

وإلى ذلك الحين استودعكم الله والسلام عليكم ورحمة الله وبركاته.

@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 using CursorLoader 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...
        }
    }
}

 

الترجمة

المصطلح

فعالية

Activity

ضمني

Implicit

Advertisements

, , , , , , , , , , , , , , , , , , , , , , , ,

  1. أضف تعليق

اترك رد

Please log in using one of these methods to post your comment:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s

%d مدونون معجبون بهذه: