A7med

Staff
  • عدد منشوراتي

    6
  • تاريخ الإنضمام

  • تاريخ اخر زياره

السمعه بالموقع

8 Neutral

2 متابعين

عن العضو A7med

  • الرتبه
    مبدع جديد

معلومات عامة

  • الجنس
    انثى

اخر الزوار

824 زياره للملف الشخصي
  1. شرح App Shortcuts

    قامت شركة قوقل باطلاق انسخة ٧.١ من نظام نوقا ولم يكن التحديث لاصلاح المشاكل وانما جلب معه بعض المميزات الجديدة ولعل من ابرزها هو اختصارات التطبيق App Shortcuts وسنقوم باذن الله في هذا الدرس بشرح هذه الميزه وطريقة استخدامها. ماهي App Shortcuts ومتى نستخدمها ؟! ببساطة تقوم باضافة قائمة على التطبيق تسمح للمستخدم بعرضها دون الدخول الى التطبيق وهي مشابهه لما يوجد في نظام ios . ويمكن استخدامها لعرض مهمات او خصائص للمستخدم تسهل الوصول لها بسرعه وسلاسة !، تحتوي على نوعين : static : تضاف في ملفات الريسورس للتطبيق وتكون ثابته ولايمكن تغييرها الا بنشر التطبيق مره اخرى dynamic : نقوم باضافة في الوقت الفعلي ويمكن تحديثها دون الحاجة الى نشر التطبيق مره اخرى اضافة App Shortcuts : اضافة اختصارات التطبيق تكون بشكل سهل وسنبدأ باضافة القائمة الثابته والتي سنعرفها من ملفات resources . STATIC SHORTCUTS ساقوم بافتراض ان لديك مشروع في تطبيق اندرويد ستديو واحتاج منك الذهاب الى ملف AndroidManifest.xml وستقوم باضافة meta-data الموجود في الكود في الاسفل : <meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts" /> تلاحظ في تاق meta-data يوجد android:resource وهذا المفتاح من يتعامل مع resource في التطبيق والذي عرف في res/xml/shourtscuts.xml هنا يمكنك تعريف اختصاراتك الثابته للتطبيق. الان سنقوم باضافة اختصار يفتح لنا مثلاً StaticShourtcutActivity كما سنلاحظ في الكود التالي : <?xml version="1.0" encoding="utf-8"?> <shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <shortcut android:enabled="true" android:icon="@drawable/ic_home_black_24dp" android:shortcutDisabledMessage="@string/static_shortcut_disabled_message" android:shortcutId="static" android:shortcutLongLabel="@string/static_shortcut_long_label" android:shortcutShortLabel="@string/static_shortcut_short_label"> <intent android:action="android.intent.action.VIEW" android:targetClass="com.example.ahmed.appshoutcut.StaticActivity" android:targetPackage="com.example.ahmed.appshoutcut" /> </shortcut> </shortcuts> تلاحظ ان root للكود هو shortcuts والذي سيقوم بالتعامل مع اكثر من shourtcut في التطبيق : enabled هنا تقوم بتفعيل او الغاء تفعيل الاختصار icon الايقونة الخاصة بالاختصار shortcutDisabledMessage تظهر رسالة في حال قام المستخدم بالضغط على اختصار غير مفعل shortcutLongLabel عنوان طويل يظهر في حال كان الانشر يستطيع عرضها “التابلت مثلاً” shortcutShortLabel هنا هو النص الذي سيظهر للمستخدم كعنوان للاختصار intent هنا المهمه او الامر الذي سيظهر في حال المستخدم اختار الاختصار DYNAMIC SHORTCUTS الان سنقوم بالتعامل مع النوع الثاني من الاختصارات وهي “المتغيره” والتي تتحدث مباشرة دون الحاةه الى نشر التطبيق مره اخرى وعلى عكس الاختصارات الثابته لن نحتاج الى اضافتها في xml او resource التطبيق ولكن سنقوم بكتابتها في كود Java . الان سنقوم باضافة اول اختصار متغير وسنتعامل مع ShortcutManager و ShortcutInfo.Builder وسنقوم ببناء اول اختصار متغير في الشاشة الرئيسية MainActivity.onCreate# ShortcutManager shortcutManager = getSystemService(ShortcutManager.class); ShortcutInfo webShortcut = new ShortcutInfo.Builder(this, "shortcut_web") .setShortLabel("a7med.name") .setLongLabel("Open a7med.name web site") .setIcon(Icon.createWithResource(this, R.drawable.ic_web_black_24dp)) .setIntent(new Intent(Intent.ACTION_VIEW, Uri.parse("http://a7med.name"))) .build(); shortcutManager.setDynamicShortcuts(Collections.singletonList(webShortcut)); الان عند تشغيل التطبيق سنلاحظ اضافة الاختصار الثاني الخاص بنا . هناك الكثير عن App Shortcuts سأتكلم عنه في تدوينات لاحقة باذن الله شكرا لكم جميعاً وعذراً على الانقطاع
  2. قامت قوقل في السنة الماضية باطلاق polymer وهو مشروع مفتوح المصدر يهتم بواجهات المستخدم مع مكونات للواجهات تتماشى مع فلسلفة قوقل في التصميم "Material Design". قامت قوقل باستخدام polymer في بعض خدماتها كالترجمة وموقع التواقيت الخاص بمؤتمر المطورين ،، ممايعطينا ثقة كبيرة في استخدام هذا المشروع. المشروع يعتمد على Tags Html المخصصة من قبل polymer وبابسط الطرق يمكننا بناء تطبيق كامل بتصميم الماتيريال ديزاين ونشره على الانترنت . سنقوم باستخدام ماطلقت عليه polymer toolbox الذي تم الاعلان عنه في مؤتمر المطورين قبل ايام قليلة. ويعتبر polymer toolbox مجموعة من المكونات والقوالب والادوات لبناء تطبيقات الويب بpolymer سنبدأ باذن الله عن كيفية التثبيت وتصفح اول تطبيق ويب خاص بك باستخدام LC وبعد ذلك باذن الله ساقوم باضافة المزيد من الدروس ، تثبيت Polymer CLI: سنحتاج بداية الى تثبيت CLI ونو اختصار "Command-line tool polymer" : ملاحظة: يجب ان تكون مثبت Node.js على جهازك ويمكنك تثبيتها عن طريق موقعهم من هنا ثبت Polymer عن طريق هذا الامر : npm install -g polymer-cli انتظر قليلاً وسيتم التثبيت . تهيئة تطبيقك الاول: 1 - انشاء مجلد جديد باي اسم تريد لننطلق منه لبناء تطبيقنا . mkdir my-app cd my-app 2 - تهيئة التطبيق مع قالب التطبيق : polymer init app-drawer-template شغل تطبيقك: polymer toolbox لايحتاج الى عمل اي شئ للبدء في البرمجة ،، كل ماتحتاجة هو تعديل الملف وتحديث المتصفح وستظهر لك تتغيراتك . polymer serve --open سيفتح لك المتصفح مباشرةً على تطبيقك وذلك باستخدام السيرفر المحلي http://localhost:8080 سنقوم في الدروس القادمة بالتعرف اكثر على هذا المشروع polymer من البناء الى النشر بإذن الله .
  3. يوجد العديد من التطبيقات التي تحتوي على ميزة مشاركة المواقع القريبة من المستخدم ولعل اكبر مثال على ذلك هو تطبيق واتس اب فهو يستخدم تقريباً نفس الفكرة المقدمة من قوقل وهي Place Picke وتتيح لك هذه الميزة السرعة في تحديد الاماكن القريبة من المستخدم بدون استخدام تقنيات مثل NearBy والتعقيدات واستهدام الخرايط . في هذا الدرس ستتعرف على طريقة مشاركة الاماكن بشكل سريع واسطر قليله جداً. بداية كل بداية في استخدام خدمات قوقل هو الحصول على API KEY . الحصول على API KEY : ادخل الى هذه الرابط https://console.developers.google.com ثم قم باتباع الشرح الموجود اسفل الفيديو : الحصول على SHA1 اضافة خدمات قوقل للتطبيق : في ملف gradel.bulide قم بكتابة هذا السطر المضلل : dependencies { compile 'com.google.android.gms:play-services-location:8.4.0' } الان الانتقال الى Activity : قم باضافة Button او اي شئ تريد من المستخدم اذا قام بالضغط عليه ان يقوم بنقله الى شاشة اختيار مكان قريب، وفي امر الضغط لهذا Button نقوم بكتابة هذا السطرين : PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder(); try { startActivityForResult(builder.build(MainActivity.this), PLACE_PICKER_REQUEST); } catch (GooglePlayServicesRepairableException | GooglePlayServicesNotAvailableException e) { e.printStackTrace(); } الان اذا قام المستخدم بالضغط على Button سيتم نقله الى شاشة اختيار مكان قريب . لكن الان كيف اقوم باعادة النتائج اذا قام المستخدم بالاختيار . اعادة النتائج : نحتاج الان اضافة دالة onActivityresult() لاعادة البيانات التي قام المستخدم باختيارها . protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == PLACE_PICKER_REQUEST) { if (resultCode == RESULT_OK) { Place place = PlacePicker.getPlace(data, this); String place_name = String.format(getString(R.string.place_name), place.getName()); String place_addrress = String.format(getString(R.string.place_adress), place.getAddress()); name.setText(place_name); address.setText(place_addrress); } } } عند اعادة النتائج سنلاحظ استخدامنا لـPlace حيث سيحتوي على جميع بيانات الموقع: Place place = PlacePicker.getPlace(data, this); اهم البيانات التي يحتوي عليها Opject Place : لم اتطرق لبعض الدوال ،، فقط المهم منها الدالة وظيفتها getId اعادة رقم الموقع وهو رقم فريد getLatLng اعادة خطوط الطول والعرض للموقع الحالي getName اعادة اسم الموقع الحالي getPhoneNumber اعادة رقم الهاتف للموقع الحالي اذا كام متوفر getPlaceTypes اعادة نوع الموقع "مطعم او صراف .. الخ" النتيجة النهائية :
  4. ماشاء الله .. مراجعة مفصلة الحقيبة جميلة ،، وشكرا لك على الهدية
  5. لا يخفى علينا جميعا أن التاريخ الهجري هو التاريخ المعتمد والرسمي في تعاملاتنا الحكومية وهو بداية هجرة النبي صلى الله عليه وسلم وقد نحتاج لاضافته في احد مشاريعنا لتحديد المواعيد أو شي اخر. ولكن لايوجد دعم رسمي للتاريخ الهجري في جافا القديمة ولكن تم ذلك في الإصدار الثامن الذي لم يعتمد في الاندرويد الا لبعض الapi . لذلك سنقوم باستخدام مكتبة JodaTime وتعتبر من أقوى المكتبات واسهلها في التعامل مع التواريخ والأوقات بجميع الصيغ. سنقوم بإذن الله في هذا الدرس بإنشاء تطبيق بسيط كما يظهر في الفيديو بالأسفل لتحويل التاريخ من ميلادي إلى هجري والعكس وأيضا حساب الايام المتبقية على رمضان . المتطلبات : ١ - كوب قهوة ٢ - اندرويد ستديو ويفضل ان تقوم بالتحديث الي الاصدار 2 لتتمتع بالمحاكي السريع انشئ مشروع جديد: بداية كل بداية وثورة تقنية هو انشاء مشروع جديد قم بتسمية المشروع كما تشاء وبعد ذلك قم باختيار Empty Activity . قم باضافة هذا السطر في gradle.builde وهو خاص بمكتبة JodaTime. dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.3.0' compile 'joda-time:joda-time:2.9.3' } تصميم واجهة التطبيق : سنقوم بتصميم واجهة بسيطة باستخدام Material Desing لعرض : - عرض تاريخ اليوم بالهجري. - المتبقي على شهر رمضان ،بعض المناسبات . - تحويل التاريخ من الميلادي للهجري. الشفرة البرمجية الخاصة بالواجهه : <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.ahmed.hijri.MainActivity"> <android.support.v7.widget.GridLayout android:id="@+id/choice_grid" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:padding="4dp" app:alignmentMode="alignBounds" app:columnCount="2" app:rowOrderPreserved="false" app:useDefaultMargins="true"> <android.support.v7.widget.CardView android:layout_width="0dp" android:layout_height="150dp" android:gravity="center" app:layout_columnWeight="1" app:layout_gravity="fill_horizontal"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/colorAccent" android:orientation="vertical" android:padding="10dp"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="ميلادي" android:textColor="@color/md_white_1000" android:textSize="18sp" android:textStyle="bold" /> </LinearLayout> <TextView android:id="@+id/gey_date" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:textColor="@color/md_grey_500" android:textSize="24sp" android:textStyle="bold" tools:text="April 20 2016" /> </LinearLayout> </android.support.v7.widget.CardView> <android.support.v7.widget.CardView android:layout_width="0dp" android:layout_height="150dp" android:gravity="center" app:layout_columnWeight="1" app:layout_gravity="fill_horizontal"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/colorAccent" android:orientation="vertical" android:padding="10dp"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="هجري" android:textColor="@color/md_white_1000" android:textSize="18sp" android:textStyle="bold" /> </LinearLayout> <TextView android:id="@+id/hijri_date" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:textColor="@color/md_grey_500" android:textSize="24sp" android:textStyle="bold" tools:text="April 20 2016" /> </LinearLayout> </android.support.v7.widget.CardView> <android.support.v7.widget.CardView android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center" android:text="Tile3" app:layout_columnSpan="2" app:layout_columnWeight="1" app:layout_gravity="fill_horizontal" app:layout_rowWeight="1"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/colorAccent" android:orientation="vertical" android:padding="10dp"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="متبقي على رمضان" android:textColor="@color/md_white_1000" android:textSize="18sp" android:textStyle="bold" /> </LinearLayout> <TextView android:id="@+id/ramadan_date" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/tv_heading" android:layout_marginTop="20dp" android:gravity="center" android:text="345" android:textColor="@color/md_grey_500" android:textSize="67sp" android:textStyle="bold" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/tv_heading" android:layout_marginBottom="20dp" android:gravity="center" android:text="يوم" android:textColor="@color/md_grey_500" android:textSize="17sp" android:textStyle="bold" /> </LinearLayout> </android.support.v7.widget.CardView> </android.support.v7.widget.GridLayout> <android.support.design.widget.FloatingActionButton android:id="@+id/action" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="15dp" android:src="@drawable/ic_date_range_black_24dp" /> </FrameLayout> كتابة الشفرة البرمجية للـActivity : قمنا سابقاً بانشاء Activity فارغ والان سنقوم بكتابة الاوامر الخاصة بمكتبة Joda وشرحها بشكل ميسر وبسيط . DateTime.now() هنا لعرض التاريخ الميلادي بصيغه كاملة مع الوقت. لكن لو فرضاً اردنا تخصيص الوقت بصيغه معينه تناسب التطبيق الخاص بنا . مثلا اريد التاريخ بهذه الصيغه : "الجمعة ٢٢ ابريل ٢٠١٦ ميلادي" ركز معي في الجدول التالي وقم بتحديد ماذا تريد ان تعرض : الرمز شرح القيمة المستردة مثال G التقويم الحالي "هجري ، ميلادي ، الخ" نص AH,Ad C القرن الحالي رقم ٢٠ Y السنة الحالية في القرن سنة 1437 x نحتاجه اذا صادف ان السنة بدأت من نصف الاسبوع سنة 1437 w رقم الاسبوع في weekyear "المشروحة في الاعلى" رقم ٢٧ e رقم اليوم في الاسبوع رقم ٢ E اسم اليوم في الاسبوع نص الاثنين y سنة رقم 1437 D رقم اليوم في السنة رقم ١١٤ M رقم الشهر في السنة رقم ٩ d رقم اليوم في الشهر رقم ١١ a لمعرفة الوقت نص ص او م K الساعة في اليوم (٠-١١) رقم ٠ h رقم الساعة في نصف اليوم (١ - ١٢ ) رقم ١٢ H الساعة في اليوم ( ٠ - ٢٣ ) رقم ١٣ k الساعة صحيحة في اليوم ( ١ - ٢٤ ) رقم ٢٤ m الدقيقة في الساعة رقم ٣٠ s الثانية في الدقيقة رقم ٥٥ S جزء من الثانية رقم ٤٥٦ z المنطقة الزمنية نص PST Z المنطقة الزمنية بحسب ID منطقة زمنية SA/Ryadth الان ومن خلال اطلاعك على الجدول ستقوم بتحديد الصيغة وستكون بهذ الشكل : DateTime.now().toString("E dd MMMM YYYY G") حددت اليوم من الاسبوع ثم اليوم من الشهر واسم الشهر وكذلك السنة وبعد ذلك اضفت نوع التقويم عرض التاريخ الهجري الحالي : الان درسنا يقوم على هذه النقطة وهو عرض التاريخ الهجري وسيكون بالاعتماد على التاريخ الميلادي الحالي : DateTime dtIslamic = DateTime.now().withChronology(IslamicChronology.getInstance()); بهذا السطر فقط نستطيع عرض التاريخ الهجري وستقوم انت اخي المتابع معي بكتابة الصيغة التي تعجبك . تحويل التواريخ : - من ميلادي الى هجري : DateTime date = new DateTime(year, monthOfYear + 1, dayOfMonth, , , ); DateTime dtIslamic = date.withChronology(IslamicChronology.getInstance()); result.setText(dtIslamic.toString("E dd MMMM yyyy G")); - من هجري الى ميلادي : بعض التلميحات لاستخدام JodaTime : - عرض عدد الايام المتبقية بين تاريخين : Days.daysBetween(new LocalDate(DateTime.now()), new LocalDate(dtIso)).getDays(); في الكود السابق كتبت اولاً التاريخ الحالي الذي ساقوم بالحساب ابتداءً منه وبعد ذلك كتبت تاريخ النهاية وستقوم المكتبة بحساب عدد الايام. ستجد في المثال المرفق طريقة عرض عدد الايام المتبقية على الشهر الفضيل عسى ان يبلغنا الله لافاقدين ولا مفقودين. قيس على المثال السابق "الشهور والاسابيع والايام والدقائق والثواني " - تحديد تاريخ معين والمنطقة الزمنية : تستطيع تحديد التاريخ والوقت والمنطقة الزمنية باستخدام المكتبة وتخصيصها. DateTime cestTime = new DateTime(2013, 6, 10, 2, , DateTimeZone.forID("Europe/Berlin")); - التحقق من هل التاريخ قبل او بعد التاريخ الحالي : توجد دالة تدعى isBefore وهي للتاكد هل التاريخ هذا قبل ام بعد وتستطيع مثلا استخدامها اذا اردت من المستخدم تحديد تاريخ مستقبلي مثلاً. التطبيق : https://github.com/ahmedoid/Hijri ختاماً : اتمنى اني وفقت في ايصال المعلومة بشكل بسيط وسلس وان شاء الله القادم افضل
  6. السلام عليكم تم الغاء استخدام هذه الطريقة وتم استبدالها بـ HttpURLConnection ويمكن استخدامها بهذا الشكل : import android.util.Log; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.logging.Level; import java.util.logging.Logger; public class JSONParser { static JSONObject jObj = null; static String json = ""; // constructor public JSONParser() { } public JSONObject getJSONFromUrl(String url) { HttpURLConnection c = null; try { URL u = new URL(url); c = (HttpURLConnection) u.openConnection(); c.setRequestMethod("GET"); c.setRequestProperty("Content-length", "0"); c.setUseCaches(false); c.setAllowUserInteraction(false); c.setConnectTimeout(6000); c.setReadTimeout(1000); c.connect(); int status = c.getResponseCode(); switch (status) { case 200: case 201: BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream())); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line + "\n"); } br.close(); json = sb.toString(); } } catch (IOException ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } finally { if (c != null) { try { c.disconnect(); } catch (Exception ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } } } // try parse the string to a JSON object try { jObj = new JSONObject(json); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); } // return JSON String return jObj; } }

عالم البرمجة

عالم البرمجة مقالات برمجة و دورات مجانية لإحتراف البرمجة هدفنا تبسيط البرمجة ونشرها بيد الكل بشكل ممتع ومتطور ومحدث بإستمرار لمواكبة جديد تطورات البرمجة الحديثة و المتقدمة بدون مقابل