Sharing Content (Android Development Patterns S2 Ep 6)



هذه الأيقونة الصغير تعني المشاركة. وهذا رائع في نظام اندرويد. يمكنك إنشاء action_send intent بنفسك، ولكن أفضّل استخدام ShareCompat
ومشاركة النص باستخدام أمر واحد فقط. أعني مثل– وسأشرح ما هو ضروري لمشاركة المحتوى بشكل صحيح
مع التطبيقات الأخرى، وكذلك استقبال المحتوى. أي أنواع من المحتوى؟ لقد رأينا النص، ولكن ماذا عن
النصوص المنسَّقة بواسطة HTML والملفات والصور،
هل شئ مثل هذا ممكن؟ نعم، ممكن. لذا هيا ننفذه. لنشارك بعض النصوص. يقوم ShareCompat بالعمل
الصعب المتعلق ببناء intent. علينا فقط التأكد من تعيين نوع MIME. هكذا يقوم التطبيق بتصفية
نوع المحتوى الذي يمكنه استقباله. ثم نقوم باستدعاء startActivity. ونقوم بإحاطته بـ resolveActivity. وهذا يمنع النشاط من العثور
على استثناءات لحالات لا يكون فيها بالفعل أي تطبيقات تستطيع التعامل مع ما نشاركه. الحذر أفضل من الندم. ولكن ذلك كان سهلاً جدًا. لنقوم بتنفيذ نص HTML–
كرسالة بريد إلكتروني. حسنًا، ليس هناك الكثير لنفعله. نص HTML يستخدم setHtmlText. هذا منطقي. أضفنا الموضوع ويمكننا إضافة
حقول العناوين "إلى" و"نسخة إلى" و"نسخة مخفية الوجهة" متعددة. وهي تنطبق فقط على تطبيقات
البريد، ولكن لا بأس. يمكن للتطبيقات المستقبلة
تجاهله إن أرادت. فقط قم بتوفير كل ما لديك. ولكن التحدث عن الجانب المرسل، دون التحدث عن الجانب المستقبل، كالتحدث عن زبدة الفول السوداني دون ذكر حلوى الجيلي، أو شئ من هذا القبيل. سيحتاج النشاط المستقبل إلى
عامل تصفية intent مع نوع MIME المناسب. سنلاحظ أننا أضفنا category.DEFAULT. لن نحصل على أي من آليات intent
الضمنية لـ startActivity التي قمنا بإنشائها بدونه. category.BROWSABLE
هو ما يسمح للمواقع بالمشاركة داخل التطبيق مباشرة. ثم، سواء استخدم المرسل
SharedCompat أم لا، يمكنك استخدام intentReader لاستخراج المعلومات التي تحتاجها. ولكن النص، سواء كان منسقًا أم لا،
يكون بدائيًا بعض الشئ. فلننتقل إلى الجزء الممتع–
مشاركة صورة مثلاً. الآن نقترب من غايتنا. حسنًا، إذًا setStream جديد. فيما عدا من أين نحصل على uriToImage؟ هنا يأتي الجزء الشيق. قد تعتقد أن هذا يمكن أن يكون
مسار الملف المؤدي للصورة نفسها. هذه حقًا فكرة سيئة. هذا معناه أنه يجب كتابة الملف
بمكان يمكن الوصول إليه من تطبيقات أخرى،
مما قد يتطلب إذن WRITE_STORAGE،
وسيحتاج التطبيق المستقبل بالتأكيد إلى إذن READ_STORAGE. مع إصدار 6.0 Marshmallow
من Android، هذه أذونات خطيرة يجب طلبها أثناء وقت التشغيل. لا تكن مثل هذه التطبيقات. بدلاً من ذلك، لدينا مستند كامل للتدريب عن مشاركة الملفات بشكل
صحيح لا يتطلب أي إذن تخزين باستخدام FileProvider. اطلع على المنشورات والمستندات على مدونتنا
للتعرف على كيفية إعداد كل شئ أولاً. إذًا كيف تبدو التعليمات
البرمجية لدينا الآن؟ لقد استخدمنا getUriForFile لمزود الملفات للحصول على URI يمكن مشاركته
ومناسب للتمرير إلى تطبيق آخر. رائع. يمكننا حتى الحصول على
طريقة لتحديد النوع تلقائيًا من الملف. في الداخل، يستخدم هذا
الأسلوب ما يسمى بالأذونات المعتمدة على URI. يمنح التطبيق المرسل إذنًا لـ URI واحد فقط. ونقوم بمنح الإذن باستدعاء
setData من خلال URI، ثم إضافة
FLAG_GRANT_READ_URI_PERMISSION. هذا هو كل شئ. والآن يمكن للجانب المستقبل استخدام
getContentResolver openInputStream
للحصول على الصورة. إذًا نحن نعرف كيفية مشاركة النصوص
والملفات مع التطبيقات الأخرى، وكذلك استقبال هذه الملفات، كل هذا دون أذونات خطيرة. أتمنى أن يساعدكم هذا في
التعاون مع الآخرين وإنشاء تطبيقات أفضل.

14 thoughts on “Sharing Content (Android Development Patterns S2 Ep 6)

  1. Please i am using the ShareCompat.Intent reader to read the image but i need a file i can post to my server.I use File newFile = File(pathOFUri) in m y multipart form data request but it does not posst successfully

  2. +Ian Lake I have replaced my previous image share intent with exact ShareCompat code from this video.
    I now have a problem that when sharing to Gmail "To:" field is filled with image path. Very strange. Am I doing something wrong?

  3. For all that is holy or unholy, shave that filthy beast that has attached and grown itself to your neck region

Leave a Reply

Your email address will not be published. Required fields are marked *