בין אם זו תמונה מצחיקה, סרטון אינפורמטיבי או קטע אודיו מרתק, שמאפשר למשתמשים לשתף תוכן מעשיר את החוויה שלהם ומקדם מעורבות. המסמך הזה בוחן את העקרונות הבסיסיים של שיתוף מדיה ב-Android, כולל ה-API והטכניקות הנדרשים כדי לשלב את היכולת הזו.
האפליקציה מיועדת לשיתוף
התכנון של Android מעודד יכולת פעולה הדדית בין אפליקציות באמצעות מערכת שמבוססת על אובייקטים מסוג Intent. Intent הוא תיאור מופשט של פעולה שצריך לבצע. אובייקטים מסוג Intent מאפשרים לאפליקציות לתקשר זו עם זו ללא צורך לדעת ספציפיים אחד על השני.
כשאפליקציה רוצה לשתף נתונים או להתחיל פעולה, היא יוצרת כוונה (Intent) שמציינת את סוג התוכן והפעולה. מערכת Android מציגה רשימה של אפליקציות רלוונטיות שיכולות לטפל ב-Intent הזה, ומאפשרת למשתמש לבחור באפליקציה שבה הוא רוצה להשתמש. הגישה הזו מעודדת יצירת סביבה שיתופית.
שיתוף טקסט כולל רק כמה שורות קוד:
val sendIntent: Intent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_TEXT, "This is my text to share.")
type = "text/plain"
}
val shareIntent = Intent.createChooser(sendIntent, null)
startActivity(shareIntent)
הקו createChooser
מציג את ממשק המשתמש Android Sharesheet,
מאפשר למשתמשים לשתף מידע עם אנשים — כולל הצעות רלוונטיות לאפליקציות —
בהקשה אחת. דברים נוספים שאפשר לעשות באמצעות ה-Sharesheet של Android:
- איך אפשר לדעת מתי המשתמשים משלימים שיתוף ואיפה
- הצגת תצוגות מקדימות של תוכן עם טקסט עשיר, החל מ-Android 10 (רמת API 29)
אפשר לקרוא מידע נוסף על Android במאמר שליחת נתונים פשוטים לאפליקציות אחרות. שיתוף גיליונות ואיך להשתמש בהם.
מתן יעדים של שיתוף ישיר כדי שלמשתמשים יהיה קל ומהיר יותר אפליקציות אחרות כדי לשתף עם האפליקציה כתובות URL, תמונות או סוגים אחרים של נתונים. ישיר שיתוף פועל על ידי הצגת אנשי קשר ישירות מאפליקציות של העברת הודעות ואפליקציות של רשתות חברתיות. בדף השיתוף של Android, בלי שהמשתמשים יצטרכו לבחור את האפליקציה ולאחר מכן מחפשים את איש הקשר.
לתמוך בקבלת תוכן עשיר באמצעות
OnReceiveContentListener
. ה-API הזה מרוכז במקום אחד
קוד לקבלת כל התוכן, החל מטקסט פשוט ומסוגנן ועד לתגי עיצוב,
תמונות, סרטונים, קובצי אודיו ועוד. התוכן יכול להגיע מהתמונה
מקלדות, גרירה ושחרור, או הלוח.
שיתוף קובצי מדיה
אובייקטים מסוג Intent יכולים להכיל רק כמות קטנה של נתונים, כך שמערכת Android מספקת דרך אובייקטים מסוג Intent שמכילים נקודת אחיזה מאובטחת לקבצים. שיתוף קובצי מדיה באופן מאובטח מ- באפליקציה שלכם:
- מגדירים את האפליקציה כך שתציע כתובת מאובטחת לקובץ – בצורת URI של תוכן – באמצעות הרכיב
FileProvider
של Android. - יש לציין ספריות שניתנות לשיתוף במניפסט.
- יש להשתמש ב-
getUriForFile
כדי ליצור כתובת URL של תוכן שפועלת באופן מאובטח נקודת אחיזה לקובץ. - יוצרים Intent שמעניק הרשאות לקובץ.
מידע נוסף על שיתוף מאובטח זמין במאמר מידע על שיתוף קבצים .
אופטימיזציה של מדיה לשיתוף
האם אתם משתפים מדיה עם משתמשים אחרים באפליקציה שלכם, או משתפים מדיה עם אפליקציה אחרת, כדאי לוודא שאתם משתפים מדיה שמציעה איכות גבוהה חוויית השיתוף.
איך מוצאים את האיזון בין איכות לגודל
קובצי מדיה גדולים יכולים לצרוך במהירות רוחב פס ואחסון, מה שמוביל עיכובים מתסכלים וחיובים אפשריים על חריגה בנתונים של המשתמשים. דחיסה היא החבר הכי טוב שלך כאן.
- דחיסת תמונות: שימוש בפורמטים מודרניים לדחיסת תמונות, כמו WebP ו-AVIF, שמציעים יחסי דחיסה מעולים בהשוואה ל-AVIF קובצי JPEG ללא פגיעה משמעותית באיכות. אפשר לנסות איכות שונה כדי למצוא את שביל הזהב.
- דחיסת וידאו: ניצול העוצמה של וידאו ב-AV1 או H.265 (HEVC)
דחיסת נתונים כדי לספק יעילות דחיסה טובה יותר תוך שמירה על
איכות ויזואלית מצוינת. ניתן לבדוק את הנוכחות של קידוד חומרה
במכשירי Android 10 ואילך, וגם ב-
mediaPerformanceClass
כדי לעזור כדי לקבוע במה המכשיר שלכם יכול לתמוך בצורה הטובה ביותר. מומלץ להציע אחר לטיפול בהעדפות משתמשים שונות וברשתות שונות את התנאים וההגבלות.
fun hasHardwareEncodingSupportFor(mimeType: String): Boolean {
val codecList = MediaCodecList(REGULAR_CODECS)
val codecInfos = codecList.codecInfos
for ( codecInfo in codecInfos ) {
if (!codecInfo.isEncoder()) {
continue;
}
if (!codecInfo.isHardwareAccelerated()) {
continue;
}
val types: Array<String> = codecInfo.getSupportedTypes()
for (j in types.indices) {
if (types[j].equals(mimeType, ignoreCase = true)) {
return true
}
}
}
return false
}
// test for AV1 hardware encoding support
val hasAV1 = hasHardwareEncodingSupportFor("video/av01")
התאמת המדיה
פלטפורמות של רשתות חברתיות אוכפות לעתים קרובות מאפיינים ויחסי גובה-רוחב ספציפיים במדיה משותפת. שינוי גודל וחיתוך של קובצי מדיה באופן יזום לפני השיתוף יכולים למנוע בעיות בלתי צפויות של עיוות או פורמט כשהמשתמשים מפרסמים בפלטפורמות המועדפות עליהם.
להציג הוראות ברורות לגבי הדרכים שבהן משתמשים יכולים לבצע אופטימיזציה של המדיה שלהם לפני השיתוף. תוכלו למצוא כאן טיפים להתאמת קצבי העברת הנתונים של הקידוד. הגדרת פרמטרים של כימות, בחירת פורמט הווידאו, בחירת גודל קובץ מתאים, או הבנת ההשפעה של אפשרויות שיתוף.
שיפור יכולת הגילוי של המדיה
הוספת מטא-נתונים רלוונטיים למדיה, כמו שמות, תיאורים ותגים יכולים לשפר את יכולת הגילוי שלהם. עידוד המשתמשים להוסיף כתובות אימייל משלהם תיאורים וכתוביות בזמן השיתוף, כדי להעניק חוויה אישית עוד יותר.
הוספת מטא-נתונים לתמונות
המחלקה Jetpack ExifInterface כותבת מטא-נתונים ל-JPEG , PNG ו-WebP בצורת תגי Exif.
// sets the title of the image in the form of Exif data
val exif = ExifInterface(imageFile)
exif.setAttribute(ExifInterface.TAG_IMAGE_DESCRIPTION, "Beautiful sunset")
exif.saveAttributes()