بسم الله الرحمن الرحيم
في الدرس السابق تعلمنا كيفية استقبال بيانات من تطبيقات أخرى إلى تطبيقك في برمجة تطبيقات اندرويد, ودرس اليوم العكس كيف تشارك البيانات التي في تطبيقك إلى تطبيقات أخرى أي مشاركتها ..
بالتأكيد كما ذكرنا سابقاً اننا سوف نستخدم Intent , وقد شرحناها كثيراً ولن ننتهي من شرحها فهي الرسائل او الأوامر داخل النظام .. مثلاً تم تركيب بطاقة ذاكرة, أو لقد وصلت رسالة, أو تم تشغيل تطبيق معين .. كلها أوامر انتنت.
سوف نشرح في هذا الدرس : ( share )
- نشر ( مشاركة ) نص.
- نشر ( مشاركة ) صورة.
- نشر ( مشاركة ) صور متعددة.
وسوف أستخدم 3 أزرار .. واحد لمشاركة الصورة وأخر لمشاركة النص وأخر لمشاركة صورتين .. اي عدد تريده ..
إذا فقط سوف أستخدم صورتين في التطبيق في مجلد drawable.
إذا ننشأ الآن ثلاث أزرار ونعطي لكل زر خاصية onClick .. من أجل كل زر يشغل دالة معينة.
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="10dp" > <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="shareText" android:layout_margin="20dp" android:textSize="20dp" android:text="مشاركة النص"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="shareImage" android:textSize="20dp" android:layout_margin="20dp" android:text="مشاركة صورة"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="shareMultipleImages" android:layout_margin="20dp" android:textSize="20dp" android:text="مشاركة صور"/> </LinearLayout>
ركز أكثر شيء على خاصية الاون كليك onClick .
معاينة لملف activity_main.xml :
حسب الكود السابق اخبرناه التالي :
- زر مشاركة النص عند الضغط عليك نفذ لنا الدالة shareText
- زر مشاركة صورة عند الضغط عليك نفذ لنا الدالة shareImage
- زر مشاركة صور عند الضغط عليك نفذ لنا الدالة shareMultipleImages
وهذه الدوال نحن سوف نضيفها برمجياً في ملف الجافا ( الاكتفتي ).
MainActivity.java
package com.andrody.first_app; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import java.util.ArrayList; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } // نفذ هذه الدالة بعد الضغط على زر مشاركة النص public void shareText(View v) { Intent sendIntent = new Intent(); // تعيين الاجراء الذي نريده وهنا ارسال بيانات sendIntent.setAction(Intent.ACTION_SEND); // اضافة النص للانتنت sendIntent.putExtra(Intent.EXTRA_TEXT, "مرحباً بكم جميعاً في مدونة اندرودي عربي"); // النص الذي تريد مشاركته // تعيين نوع البيانات التي تريد ارسالها وهي نص sendIntent.setType("text/plain"); // تشغيل الانتنت السابق بالاضافة إلى تعيين النص الذي يظهر عند اختيار التطبيق الذي تريد مشاركة معه startActivity(Intent.createChooser(sendIntent,"اختار التطبيق الذي مشاركة النص معه :")); } // نفذ هذه الدالة بعد الضغط على زر مشاركة صورة public void shareImage(View v) { // مكان الصورة التي تريد مشاركتها بعد الضغط على الزر // com.andrody.first_app غيره بإسم الباكيج لديك + عدل اسم الصورة حسب الموجود عندك Uri uri = Uri.parse("android.resource://com.andrody.first_app/" + R.drawable.android_1); // تعيين الاجراء الذي نريده وهنا ارسال بيانات Intent sendIntent = new Intent(Intent.ACTION_SEND); // اضافة uri وهو في الاعلى الصورة الى البيانات التي سوف يتم جلبها sendIntent.putExtra(Intent.EXTRA_STREAM, uri); // تعيين نوع البيانات التي تريد ارسالها وهنا النوع هو صورة sendIntent.setType("image/*"); // تشغيل الانتنت السابق بالاضافة إلى تعيين النص الذي يظهر عند اختيار التطبيق الذي تريد مشاركة معه startActivity(Intent.createChooser(sendIntent,"اختار التطبيق الذي مشاركة الصورة معه :")); } // نفذ هذه الدالة بعد الضغط على زر مشاركة صور public void shareMultipleImages(View v) { // سلسلة من نوع Uri واسمها imageUris وتحتوي على مجموعة صور ArrayList<Uri> imageUris = new ArrayList(); // روابط الصور التي سوف يتم مشاركتها imageUris.add(Uri.parse("android.resource://com.andrody.first_app/drawable/android_1")); imageUris.add(Uri.parse("android.resource://com.andrody.first_app/drawable/android_2")); // تعيين الاجراء الذي يقوم به الانتنت وهو ارسال متعدد Intent sendIntent = new Intent(Intent.ACTION_SEND_MULTIPLE); // اضافة imageUris وهو في الاعلى السلسلة التي سوف يتم جلبها sendIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris); // تعيين نوع البيانات التي تريد ارسالها وهنا النوع هو صورة sendIntent.setType("image/*"); // تشغيل الانتنت السابق بالاضافة إلى تعيين النص الذي يظهر عند اختيار التطبيق الذي تريد مشاركة معه startActivity(Intent.createChooser(sendIntent,"اختار التطبيق الذي مشاركة الصور معه :")); } }
بالنسبة لـ android_1 و android_2 هي اسماء الصور التي وضعتها في مجلد drawable. أما بالنسبة لـ com.andrody.first_app داخل الروابط .. فهو اسم الباكيج الخاص بالتطبيق. بالتأكيد غيرها حسب تطبيقك.
معاينة لدرس اليوم : ( انقر على الصورة لتكبيرها )
ملاحظة / حاول أن تصنع أكوادك بنفسك .. مثلاً في مشاركة الصور المتعددة حاول اضافت معها نص .. الأمور كلها سهلة . فتركيبة الكود السابق انا مغير فيها كثيراً عن الموجودة في موقع المطورين. لذلك حاول من التجربة تصنع أكوادك الخاصة.
ما أخذناه في هذا الدرس يعتبر خام فقط, هذه الميزة تستخدمها أغلب التطبيقات, فهي مفيدة جداً مثلاً في صنع برامج الصور, حالات الواتس اب والمسجات و تصميم الصور والمتصفحات وكل البرامج تقريباً.
أرجوا أن أكون وفقت في هذا الدرس .. وانتظرونا أخوتي بكل جديد ومفيد .. كما أرجوا نشر المدونة للجميع لكي تعم الفائدة لكل العرب بالاضافة إلى تشجيعنا إلى تنزيل المزيد من الدروس الحصرية والمفيدة لكم. والسلام عليكم.
لكن يااخي اثناء متابعتي لشرحك .. اريد ان اعرف ماهو الي سيتم مشاركتة الان ؟؟
أين “النص” الذي سيتم مشاركتة ؟؟
____
مثلاً لدي برنامج فيه رسائل للموبايل .. واريد ان اجعل اي شخص يضغط على
اي “نص الرسالة” يتم مشاركتها .. ماذا افعل ؟
لاحظ ما الذي تم مشاركته في رسالة الواتس اب في صور المعاينة ؟! ..
لاحظ هو نفسه موجود بالكود البرمجي .. هذا في حال اردت مشاركة نص معين ..
أما تريد مشاركة رسالة .. ضع بدل النص .. السترنج الخاص بالرسالة.
يا اخي الكريم عملت نفس خطواتك في ارسال الصورة وعندما اختار مشاركة الصورة في الوتساب يلع خطا the file format is not supported بس لو اعملها مشاركة بالجيميل تمشي اما باي تطبيق تواصل اجتماعي او حتى بالبلوتوث يلع نفس رسالة الخطا ارجوا المساعدة
كيف ممكن مشاركة ملف csv