الفرق بين المراجعتين لصفحة: «Cordova/webview android»

من موسوعة حسوب
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:عارض أندرويد في كوردوفا}}</noinclude> تصنيف: Cordova تصنيف: Android يوضح هذا المجلد ك...'
 
لا ملخص تعديل
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:عارض أندرويد في كوردوفا}}</noinclude>
<noinclude>{{DISPLAYTITLE:عوارض أندرويد في كوردوفا}}</noinclude>
[[تصنيف: Cordova]]
[[تصنيف: Cordova]]
[[تصنيف: Android]]
[[تصنيف: Android]]
يوضح هذا المجلد كيفية تضمين مُكوّن (component) [[Cordova/webviews|عارض]] كوردوفا داخل تطبيقات أندرويد الكبيرة. للمزيد من التفاصيل حول كيفي يمكن أن تتوصل هذه المكونات مع بعضها، راجع إضافات التطبيق.  
[[تصنيف: WebView]]
يوضح هذا الدليل كيفية تضمين مُكوّن (component) [[Cordova/webviews|عارض]] كوردوفا داخل تطبيقات أندرويد الكبيرة. لمزيد من التفاصيل حول كيف يمكن جعل هذه المكونات تتواصل مع بعضها، راجع [[Cordova/plugins|دليل تطوير الإضافات]].


إذا لم تكن لديك خبرة بمنصة أندرويد، فعليك الاطلاع أولًا على [index.html Android Platform Guide]، وتثبيت أحدث إصدار من إطار العمل SDK الخاص بأندرويد قبل محاولة اعتماد طرق متقدمة لتضمين [[Cordova/webviews|العوارض]]. بدءًا من الإصدار 1.9 من كوردوفا، صارت منصة أندرويد تعتمد على المُكوِّن <code>CordovaWebView</code>، والتي بُنِيت على مُكوِّن قديمٍ من <code>CordovaActivity</code> كان معمولًا به قبل الإصدار 1.9.  
إذا لم تكن لديك خبرة بمنصة أندرويد، فعليك الاطلاع أولًا على [[Cordova/platforms android|دليل التطوير على منصة أندرويد]]، وتثبيت أحدث إصدارٍ من إطار العمل SDK الخاص بأندرويد قبل محاولة اعتماد طرق متقدمة لتضمين [[Cordova/webviews|العوارض]]. بدءًا من الإصدار 1.9 من كوردوفا، صارت منصة أندرويد تعتمد على المُكوِّن <code>CordovaWebView</code>، والذي بُنِي على المُكوِّن القديم <code>CordovaActivity</code>، الذي كان معمولًا به قبل الإصدار 1.9.  
* لاتباع هذه التعليمات، تأكد من أنّ لديك أحدث توزيعة من كوردوفا. نزِّلها من [http://cordova.apache.org cordova.apache.org]، وفُكَّ ضغط حزمة أندرويد الموجودة فيها.  
* لاتباع هذه التعليمات، تأكد من أنّ لديك أحدث توزيعة من كوردوفا. نزِّلها من الموقع [http://cordova.apache.org cordova.apache.org]، وفُكَّ ضغط حزمة أندرويد الموجودة فيها.  
* انتقل إلى مجلد حزمة أندرويد <code>/framework</code>، ونفِّذ الأمرَ <code>ant jar</code>. والذي سيُنشئ الملف <code>.jar</code> الخاص بكوروفا، على الشكل <code>/framework/cordova-x.x.x.jar</code>.  
* انتقل إلى مجلد حزمة أندرويد <code>/framework</code>، ونفِّذ الأمرَ <code>ant jar</code>. والذي سيُنشئ الملف <code>.jar</code> الخاص بكوروفا، على النحو التالي ‎<code>/framework/cordova-x.x.x.jar</code>.  
* انسخ الملف <code>.jar</code> إلى مجلد مشروع أندرويد <code>/libs</code> .  
* انسخ الملف <code>.jar</code> إلى مجلد مشروع أندرويد‎ <code>/libs</code> .  
* أضف المُدخلات التالية إلى الملف <code>/res/xml/main.xml</code> الخاص بالتطبيق، مع تعديل <code>layout_height</code> و <code>layout_width</code> و <code>id</code> لتتناسب مع التطبيق:  
* أضف المُدخلات التالية إلى الملف <code>/res/xml/main.xml</code>، مع تعديل <code>layout_height</code> و <code>layout_width</code> و <code>id</code> لتتناسب مع خصوصيات التطبيق:  
<syntaxhighlight lang="javascript"><org.apache.cordova.CordovaWebView
<syntaxhighlight lang="xml"><org.apache.cordova.CordovaWebView
     android:id="@+id/tutorialView"
     android:id="@+id/tutorialView"
     android:layout_width="match_parent"
     android:layout_width="match_parent"
     android:layout_height="match_parent" /></syntaxhighlight>  
     android:layout_height="match_parent" /></syntaxhighlight>
* قم بتعديل [[Cordova/Activity|النشاط]] لكي يقدم <code>CordovaInterface</code>. يجب أن يقدم التوابع المُتضمّتة. قد ترغب في نسخها من <code>/framework/src/org/apache/cordova/CordovaActivity.java</code>، أو يمكنك تقديمها على النحو الذي تشاء. تعرض الشيفرة البرمجية التالية تطبيقًا بسيطًا يعتمد على الواجهة. لاحظ كيف يتطابق مُعرِّف [[Cordova/webviews|العارض]] المشار إليه من قبل السمة <code>id</code> المحددة في ملف XML الموضح أعلاه:  
* قم بتعديل [[Cordova/Activity|النشاط]] لكي يقدم <code>CordovaInterface</code>. مع تقديم التوابع المُتضمّتة. قد ترغب في نسخها من <code>/framework/src/org/apache/cordova/CordovaActivity.java</code>، أو يمكنك تقديمها على النحو الذي تشاء. تعرض الشيفرة البرمجية التالية تطبيقًا بسيطًا يعتمد على الواجهة المُقدمة. لاحظ كيف يتطابق مُعرِّف [[Cordova/webviews|العارض]] المشار إليه من قبل السمة <code>id</code> المحددة في ملف XML الموضح أعلاه:  
<syntaxhighlight lang="javascript">public class CordovaViewTestActivity extends Activity implements CordovaInterface {
<syntaxhighlight lang="javascript">public class CordovaViewTestActivity extends Activity implements CordovaInterface {
     CordovaWebView cwv;
     CordovaWebView cwv;
     /* Called when the activity is first created. */
     /* يُستدعى عند إنشاء النشاط لأول مرة */
     @Override
     @Override
     public void onCreate(Bundle savedInstanceState) {
     public void onCreate(Bundle savedInstanceState) {
سطر 31: سطر 32:
}
}
/**
/**
  * Launch an activity for which you would like a result when it finished. When this activity exits,
  * ،أطلق نشاطا تريد الحصول منه على نتيجة بعد انتهائه. بعد انتهاء النشاط
  * your onActivityResult() method is called.
  * onActivityResult() سيُستدعى التابع
  *
  *
  * @param command          The command object
  * @param command          The command object (كائن الأمر)
  * @param intent            The intent to start
  * @param intent            The intent to start (المقصد المُراد بدؤه)
  * @param requestCode      The request code that is passed to callback to identify the activity
  * @param requestCode      كود الطلبية الذي سيُمرّر إلى رد النداء لتحديد النشاط
  */
  */
public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode) {
public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode) {
     this.activityResultCallback = command;
     this.activityResultCallback = command;
     this.activityResultKeepRunning = this.keepRunning;
     this.activityResultKeepRunning = this.keepRunning;
     // If multitasking turned on, then disable it for activities that return results
     // عند تمكين تعدد المهام، فقم بتعطيله لأجل النشاطات التي تُعيد نتيجة
     if (command != null) {
     if (command != null) {
         this.keepRunning = false;
         this.keepRunning = false;
     }
     }
     // Start activity
     // بدء النشاط
     super.startActivityForResult(intent, requestCode);
     super.startActivityForResult(intent, requestCode);
}
}
@Override
@Override
/**
/**
  * Called when an activity you launched exits, giving you the requestCode you started it with,
  * الذي أطلقته به requestCode يُستدعى عند انتهاء نشاطٍ أطلقته، مع إعطائك
  * the resultCode it returned, and any additional data from it.
  * مع أي بيانات إضافية resultCode يُعيد
  *
  *  
  * @param requestCode      The request code originally supplied to startActivityForResult(),
  * @param requestCode      startActivityForResult() كود الطلبية المُرسل أصلا إلى
  *                          allowing you to identify who this result came from.
  *                          ما يتيح لك تحديد مصدر هذه النتيجة
  * @param resultCode        The integer result code returned by the child activity through its setResult().
  * @param resultCode        العدد الصحيح الذي يمثل الكود المُعاد من قبل النشاط
  * @param data              An Intent, which can return result data to the caller (various data can be attached to Intent "extras").
*                          setResult() الفرعي عبر 
  */
  * @param data              مقصدٌ يمكن أن يعيد بيانات النتيجة إلى المُستدعي، حيث  يمكن
*                          extras ربط عدة بيانات بالمقصد
  */  
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
     super.onActivityResult(requestCode, resultCode, intent);
     super.onActivityResult(requestCode, resultCode, intent);
سطر 65: سطر 68:
     }
     }
}‎</syntaxhighlight>  
}‎</syntaxhighlight>  
* أخيرًا، تذكر إضافة منظومة المهام الفرعية (thread pool)، وإلا فلن تكون هناك أي مهام فرعية لتشغّلها الأضافة:  
* أخيرًا، تذكر إضافة منظومة المهام الفرعية (thread pool)، وإلا فلن تكون هناك أي مهام فرعية لتعمل عليها الإضافة:  
<syntaxhighlight lang="javascript">@Override
<syntaxhighlight lang="javascript">@Override
public ExecutorService getThreadPool() {
public ExecutorService getThreadPool() {
     return threadPool;
     return threadPool;
}‎</syntaxhighlight>  
}‎</syntaxhighlight>  
* انسخ ملفات HTML و JavaScript الخاصة بالتطبيق إلى مجلد مشروع أندرويد <code>/assets/www</code>.  
* انسخ ملفات [[HTML]] و [[JavaScript]] الخاصة بالتطبيق إلى مجلد مشروع أندرويد <code>/assets/www</code>.  
* انسخ الملف <code>config.xml</code> من <code>/framework/res/xml</code> إلى مجلد المشروع <code>/res/xml</code>.
* انسخ الملف <code>config.xml</code> من <code>/framework/res/xml</code> إلى مجلد المشروع‎ <code>/res/xml</code>.
==مصادر==
==مصادر==
*[hhttps://cordova.apache.org/docs/en/latest/guide/platforms/android/webview.html صفحة Android WebViews في توثيق كوردوفا الرسمي.]
*[https://cordova.apache.org/docs/en/latest/guide/platforms/android/webview.html صفحة Android WebViews في توثيق كوردوفا الرسمي]

مراجعة 13:39، 26 ديسمبر 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" />
  • قم بتعديل النشاط لكي يقدم 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.

مصادر