בדיוק כמו שאפליקציה יכולה לשלוח נתונים לאפליקציות אחרות, היא יכולה גם לקבל נתונים מאפליקציות אחרות. מומלץ לחשוב על האינטראקציה של המשתמשים עם האפליקציה ועל הנתונים שרוצים לקבל מאפליקציות אחרות. לדוגמה, יכול להיות שאפליקציה של רשת חברתית תהיה מעוניינת לקבל תוכן טקסט, כמו כתובת URL מעניינת לאתר, מאפליקציה אחרת.
משתמשים של אפליקציות אחרות שולחים נתונים לאפליקציה שלך לעיתים קרובות דרך מכשיר Android קובץ שיתוף או מקודד Intent. אפליקציות ששולחות נתונים לאפליקציה שלכם צריכות להגדיר סוג MIME לנתונים האלה. האפליקציה שלכם יכולה לקבל נתונים שנשלחים על ידי אפליקציה אחרת בדרכים הבאות:
Activity
עם תגintent-filter
תואם במניפסט- שיתוף קיצורי דרך שפורסמו על ידי האפליקציה שלך.
יעדים לשיתוף ישיר הם קישורי עומק לפעילות ספציפית באפליקציה. לרוב הם מייצגים אדם או קבוצה, והם מוצגים בחלונית השיתוף של Android. לדוגמה, אפליקציית הודעות יכולה לספק יעד של 'שיתוף ישיר' לאדם מסוים, שמכיל קישור עומק ישירות לשיחה עם אותו אדם. הוראות מפורטות מפורטות במאמר הוספת יעדי שיתוף ישיר.
סוגי MIME נתמכים
במצב אידיאלי, אפליקציה צריכה להיות מסוגלת לקבל את המגוון הרחב ביותר של סוגי MIME.
לדוגמה, אפליקציית הודעות שמיועדת לשלוח טקסט, תמונות וסרטונים
תומך באופן אידיאלי בקבלת text/*
, image/*
ו-video/*
. ריכזנו כאן כמה סוגים נפוצים של MIME לשליחה ולקבלה של נתונים פשוטים ב-Android.
הנמענים נרשמים ל- | השולחים שולחים |
---|---|
text/* |
|
`image/*` |
|
video/* |
|
סיומות קבצים נתמכות | application/pdf |
כדאי לעיין במרשם הרשמי של IANA לפרסום סוגי מדיה MIME.
יוצרים יעדי שיתוף מעולים
כשמשתמש מקיש על יעד שיתוף שמשויך לפעילות ספציפית הוא להיות מסוגל לאשר ולערוך את התוכן המשותף לפני השימוש בו. הדבר חשוב במיוחד לגבי נתוני טקסט.
קבלת נתונים עם פעילות
קבלת נתונים עם פעילות כרוכה בעדכון המניפסט, תוך טיפול ב תוכן נכנס, ולוודא שהמשתמש מזהה את האפליקציה.
עדכון המניפסט
מסנני Intent מעדכנים את המערכת אילו כוונות רכיב האפליקציה מקבל.
דומה לאופן שבו יצרת כוונה עם הפעולה ACTION_SEND
בשדה
שליחת נתונים פשוטים לאפליקציות אחרות
עליך ליצור מסנני Intent כדי לקבל כוונות באמצעות הפעולה הזו. מגדירים מסנן Intent במניפסט באמצעות הרכיב <intent-filter>
.
לדוגמה, אם האפליקציה מטפלת בקבלת תוכן טקסט, מניפסט
כולל תמונה אחת או יותר מכל סוג שהוא ייראה כמו קטע הקוד הבא:
<activity android:name=".ui.MyActivity" > <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEND_MULTIPLE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter> </activity>
כשאפליקציה אחרת מנסה לשתף אחד מהדברים האלה על ידי יצירה של
כוונה ומעבירים אותה אל startActivity()
, האפליקציה שלך
מופיעה כאפשרות בגיליון השיתוף של Android או במקודד Intent ב-Android. אם המשתמש
בוחר את האפליקציה שלך, תתחיל הפעילות המתאימה (.ui.MyActivity
ב-
בדוגמה שלמעלה). אז זו האחריות שלך לטפל בתוכן בצורה המתאימה
בקוד ובממשק המשתמש.
טיפול בתוכן הנכנס
כדי לטפל בתוכן שמסופק על ידי Intent
, צריך להפעיל את getIntent()
כדי לקבל את האובייקט Intent
. אחרי שתקבלו את האובייקט, תוכלו לבדוק את התוכן שלו כדי לקבוע מה לעשות בשלב הבא. אם הפעילות הזו יכולה
להיות מופעל מחלקים אחרים של המערכת (כמו מרכז האפליקציות), צריך לקחת את זה
במהלך בחינת הכוונה.
שים לב במיוחד לבדיקת הנתונים הנכנסים, אף פעם לא ידוע לך אילו פרטים אחרים עשויה לשלוח אליך. לדוגמה, ייתכן שהוגדר סוג MIME שגוי, או יכול להיות שהתמונה שנשלחת גדולה מאוד. כמו כן, חשוב לזכור לעבד נתונים בינאריים בשרשור נפרד ולא בשרשור הראשי ('ממשק משתמש').
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { ... when { intent?.action == Intent.ACTION_SEND -> { if ("text/plain" == intent.type) { handleSendText(intent) // Handle text being sent } else if (intent.type?.startsWith("image/") == true) { handleSendImage(intent) // Handle single image being sent } } intent?.action == Intent.ACTION_SEND_MULTIPLE && intent.type?.startsWith("image/") == true -> { handleSendMultipleImages(intent) // Handle multiple images being sent } else -> { // Handle other intents, such as being started from the home screen } } ... } private fun handleSendText(intent: Intent) { intent.getStringExtra(Intent.EXTRA_TEXT)?.let { // Update UI to reflect text being shared } } private fun handleSendImage(intent: Intent) { (intent.getParcelableExtra<Parcelable>(Intent.EXTRA_STREAM) as? Uri)?.let { // Update UI to reflect image being shared } } private fun handleSendMultipleImages(intent: Intent) { intent.getParcelableArrayListExtra<Parcelable>(Intent.EXTRA_STREAM)?.let { // Update UI to reflect multiple images being shared } }
Java
void onCreate (Bundle savedInstanceState) { ... // Get intent, action and MIME type Intent intent = getIntent(); String action = intent.getAction(); String type = intent.getType(); if (Intent.ACTION_SEND.equals(action) && type != null) { if ("text/plain".equals(type)) { handleSendText(intent); // Handle text being sent } else if (type.startsWith("image/")) { handleSendImage(intent); // Handle single image being sent } } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) { if (type.startsWith("image/")) { handleSendMultipleImages(intent); // Handle multiple images being sent } } else { // Handle other intents, such as being started from the home screen } ... } void handleSendText(Intent intent) { String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT); if (sharedText != null) { // Update UI to reflect text being shared } } void handleSendImage(Intent intent) { Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); if (imageUri != null) { // Update UI to reflect image being shared } } void handleSendMultipleImages(Intent intent) { ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); if (imageUris != null) { // Update UI to reflect multiple images being shared } }
עדכון ממשק המשתמש אחרי קבלת הנתונים יכול להיות פשוט כמו לאכלס את EditText
, או מורכב יותר כמו החלת מסנן תמונה מעניין על תמונה. תלוי
מה קורה אחר כך באפליקציה.
איך לוודא שהמשתמשים מזהים את האפליקציה שלך
האפליקציה שלכם מיוצגת על ידי סמל וגם תווית ב-Android קובץ שיתוף ומקודד Intent. שני הפריטים האלה מוגדרים במניפסט. אפשר להגדיר תוויות של מסנני פעילות או Intent כדי לספק הקשר נוסף.
החל מגרסה Android 10 (רמת API 29), בחלונית השיתוף של Android נעשה שימוש רק בסמלים שהוגדרו במניפסט של תג application
. מערכת Android מתעלמת מסמלים שמוגדרים בתגים intent-filter
ו-activity
.