عوارض أندرويد في كوردوفا

من موسوعة حسوب
مراجعة 08:59، 31 ديسمبر 2018 بواسطة جميل-بيلوني (نقاش | مساهمات) (مراجعة وتدقيق)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

يوضح هذا الدليل كيفية تضمين مُكوّن (component) عارض كوردوفا داخل تطبيقات أندرويد الكبيرة. لمزيد من التفاصيل حول كيفية جعل هذه المكونات تتواصل مع بعضها، راجع دليل تطوير الإضافات.

إذا لم تكن لديك خبرة بمنصة أندرويد، فعليك الاطلاع أولًا على دليل التطوير على منصة أندرويد، وتثبيت أحدث إصدارٍ من إطار العمل SDK الخاص بأندرويد قبل محاولة اعتماد الطرق الواردة في هذا الدليل لتضمين العوارض. بدءًا من الإصدار 1.9 من كوردوفا، أصبحت منصة أندرويد تعتمد على المُكوِّن CordovaWebView، والذي بُنِي على المُكوِّن القديم CordovaActivity الذي كان معمولًا به قبل الإصدار 1.9.

  • لاتباع هذه التعليمات، تأكد من أنّ لديك أحدث توزيعة من كوردوفا. نزِّلها من الموقع cordova.apache.org، وفُكَّ ضغط حزمة أندرويد الموجودة فيها.
  • انتقل إلى مجلد حزمة أندرويد ‎/framework، ونفِّذ الأمرَ ant jar. والذي سيُنشئ الملف ‎.jar الخاص بكوروفا على النحو التالي ‎/framework/cordova-x.x.x.jar.
  • انسخ الملف ‎.jar إلى مجلد مشروع أندرويد ‎ /libs .
  • أضف المُدخلات التالية إلى الملف ‎/res/xml/main.xml مع تعديل layout_height و layout_width و id لتتناسب مع خصوصيات التطبيق:
<org.apache.cordova.CordovaWebView
    android:id="@+id/tutorialView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
  • قم بتعديل النشاط لكي ينفذ (implements) ‏CordovaInterface مع تنفيذ التوابع المُتضمّنة. قد ترغب في نسخها من ‎/framework/src/org/apache/cordova/CordovaActivity.java، أو يمكنك تنفيذها على النحو الذي تشاء. تعرض الشيفرة البرمجية التالية تطبيقًا بسيطًا يعتمد على الواجهة المُقدمة. لاحظ كيف يتطابق مُعرِّف العارض المشار إليه مع الخاصية id المحددة في ملف XML الموضح أعلاه:
public class CordovaViewTestActivity extends Activity implements CordovaInterface {
    CordovaWebView cwv;
    /* يُستدعى عند إنشاء النشاط لأول مرة */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        cwv = (CordovaWebView) findViewById(R.id.tutorialView);
        Config.init(this);
        cwv.loadUrl(Config.getStartUrl());
    }
  • إذا كان التطبيق يحتاج إلى استخدام الكاميرا، فعليك تنفيذ ما يلي:
@Override
public void setActivityResultCallback(CordovaPlugin plugin) {
    this.activityResultCallback = plugin;
}
/**
 * ،أطلق نشاطا تريد الحصول منه على نتيجة بعد انتهائه. بعد انتهاء النشاط
 * onActivityResult() سيُستدعى التابع
 *
 * @param command           The command object (كائن الأمر)
 * @param intent            The intent to start (المقصد المُراد بدؤه)
 * @param requestCode       كود الطلبية الذي سيُمرّر إلى رد النداء لتحديد النشاط
 */
public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode) {
    this.activityResultCallback = command;
    this.activityResultKeepRunning = this.keepRunning;
    // عند تمكين تعدد المهام، فقم بتعطيله لأجل النشاطات التي تُعيد نتيجة
    if (command != null) {
        this.keepRunning = false;
    }
    // بدء النشاط
    super.startActivityForResult(intent, requestCode);
}
@Override
/**
 * الذي أطلقته به requestCode  يُستدعى عند انتهاء نشاطٍ أطلقته، مع إعطائك 
 * مع أي بيانات إضافية resultCode يُعيد
 * 
 * @param requestCode       startActivityForResult() كود الطلبية المُرسل أصلا إلى
 *                          ما يتيح لك تحديد مصدر هذه النتيجة
 * @param resultCode        العدد الصحيح الذي يمثل الكود المُعاد من قبل النشاط 
 *                          setResult() الفرعي عبر  
 * @param data              مقصدٌ يمكن أن يعيد بيانات النتيجة إلى المُستدعي، حيث  يمكن 
 *                          extras ربط عدة بيانات بالمقصد
 */ 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
    CordovaPlugin callback = this.activityResultCallback;
    if (callback != null) {
        callback.onActivityResult(requestCode, resultCode, intent);
    }
}
  • أخيرًا، تذكر إضافة مُجمِّع المهام الفرعية (thread pool)، وإلا فلن تكون هناك أية مهام فرعية لتعمل عليها الإضافة:
@Override
public ExecutorService getThreadPool() {
    return threadPool;
}
  • انسخ ملفات HTML و JavaScript الخاصة بالتطبيق إلى مجلد مشروع أندرويد ‎/assets/www.
  • انسخ الملف config.xml من ‎/framework/res/xml إلى مجلد المشروع‎ /res/xml.

انظر أيضًا

مصادر