الفرق بين المراجعتين لصفحة: «Cordova/webview android»
< Cordova
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:عارض أندرويد في كوردوفا}}</noinclude> تصنيف: Cordova تصنيف: Android يوضح هذا المجلد ك...' |
لا ملخص تعديل |
||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE: | <noinclude>{{DISPLAYTITLE:عوارض أندرويد في كوردوفا}}</noinclude> | ||
[[تصنيف: Cordova]] | [[تصنيف: Cordova]] | ||
[[تصنيف: Android]] | [[تصنيف: Android]] | ||
[[تصنيف: WebView]] | |||
يوضح هذا الدليل كيفية تضمين مُكوّن (component) [[Cordova/webviews|عارض]] كوردوفا داخل تطبيقات أندرويد الكبيرة. لمزيد من التفاصيل حول كيف يمكن جعل هذه المكونات تتواصل مع بعضها، راجع [[Cordova/plugins|دليل تطوير الإضافات]]. | |||
إذا لم تكن لديك خبرة بمنصة أندرويد، فعليك الاطلاع أولًا على [ | إذا لم تكن لديك خبرة بمنصة أندرويد، فعليك الاطلاع أولًا على [[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</code>، ونفِّذ الأمرَ <code>ant jar</code>. والذي سيُنشئ الملف <code>.jar</code> الخاص بكوروفا، على النحو التالي <code>/framework/cordova-x.x.x.jar</code>. | ||
* انسخ الملف <code>.jar</code> إلى مجلد مشروع | * انسخ الملف <code>.jar</code> إلى مجلد مشروع أندرويد <code>/libs</code> . | ||
* أضف المُدخلات التالية إلى الملف <code>/res/xml/main.xml</code> | * أضف المُدخلات التالية إلى الملف <code>/res/xml/main.xml</code>، مع تعديل <code>layout_height</code> و <code>layout_width</code> و <code>id</code> لتتناسب مع خصوصيات التطبيق: | ||
<syntaxhighlight lang=" | <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" /> | android:layout_height="match_parent" /></syntaxhighlight> | ||
* قم بتعديل [[Cordova/Activity|النشاط]] لكي يقدم <code>CordovaInterface</code>. | * قم بتعديل [[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; | ||
/* | /* يُستدعى عند إنشاء النشاط لأول مرة */ | ||
@Override | @Override | ||
public void onCreate(Bundle savedInstanceState) { | public void onCreate(Bundle savedInstanceState) { | ||
سطر 31: | سطر 32: | ||
} | } | ||
/** | /** | ||
* | * ،أطلق نشاطا تريد الحصول منه على نتيجة بعد انتهائه. بعد انتهاء النشاط | ||
* | * 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 | * @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 (command != null) { | if (command != null) { | ||
this.keepRunning = false; | this.keepRunning = false; | ||
} | } | ||
// | // بدء النشاط | ||
super.startActivityForResult(intent, requestCode); | super.startActivityForResult(intent, requestCode); | ||
} | } | ||
@Override | @Override | ||
/** | /** | ||
* | * الذي أطلقته به requestCode يُستدعى عند انتهاء نشاطٍ أطلقته، مع إعطائك | ||
* | * مع أي بيانات إضافية resultCode يُعيد | ||
* | * | ||
* @param requestCode | * @param requestCode startActivityForResult() كود الطلبية المُرسل أصلا إلى | ||
* | * ما يتيح لك تحديد مصدر هذه النتيجة | ||
* @param resultCode | * @param resultCode العدد الصحيح الذي يمثل الكود المُعاد من قبل النشاط | ||
* @param data | * 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>config.xml</code> من <code>/framework/res/xml</code> إلى مجلد المشروع <code>/res/xml</code>. | ||
==مصادر== | ==مصادر== | ||
*[ | *[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
.