כשיוצרים אפליקציה, חשוב לקחת בחשבון את האפליקציות האחרות במכשיר שהאפליקציה צריכה ליצור איתן אינטראקציה. אם האפליקציה שלכם מטרגטת ל-Android 11 (רמת API 30) ומעלה, המערכת מציגה לאפליקציה שלכם חלק מהאפליקציות באופן אוטומטי, אבל מסננת אפליקציות אחרות כברירת מחדל. במדריך הזה נסביר איך לגרום לאפליקציות האחרות להיות גלויות לאפליקציה שלכם.
אם האפליקציה שלכם מטרגטת את Android מגרסה 11 ואילך, והיא צריכה ליצור אינטראקציה עם אפליקציות אחרות מלבד אלה שגלויות באופן אוטומטי, צריך להוסיף את הרכיב <queries> לקובץ המניפסט של האפליקציה. בתוך רכיב <queries>, מציינים את האפליקציות האחרות לפי שם החבילה, לפי חתימת הכוונה או לפי סמכות הספק, כפי שמתואר בקטעים הבאים.
שמות חבילות ספציפיים
אם אתם יודעים אילו אפליקציות ספציפיות אתם רוצים לשלוח להן שאילתות או ליצור איתן אינטראקציה, כמו אפליקציות שמשולבות באפליקציה שלכם או אפליקציות שאתם משתמשים בשירותים שלהן, אתם יכולים לכלול את שמות החבילות שלהן בקבוצה של אלמנטים <package> בתוך האלמנט <queries>:
<manifest package="com.example.game"> <queries> <package android:name="com.example.store" /> <package android:name="com.example.services" /> </queries> ... </manifest>
תקשורת עם אפליקציית מארח בספרייה
אם אתם מפתחים ספרייה ל-Android, אתם יכולים להצהיר על הצורך שלכם בגישה לחבילה על ידי הוספת רכיב <queries> לקובץ המניפסט של ה-AAR. לרכיב <queries> הזה יש את אותה פונקציונליות כמו לרכיב שאפליקציות יכולות להצהיר עליו במניפסטים שלהן.
אם הספרייה כוללת תקשורת עם אפליקציית מארח, למשל באמצעות שירות קשור, צריך לכלול רכיב <package> שמציין את שם החבילה של אפליקציית המארח:
<!-- Place inside the <queries> element. --> <package android:name=PACKAGE_NAME />
הכללת ההצהרה הזו מאפשרת לבדוק אם אפליקציית המארח מותקנת ולקיים איתה אינטראקציה, למשל להתקשר אל bindService().
האפליקציה שקוראת לספרייה מוצגת באופן אוטומטי לאפליקציית המארח כתוצאה מהאינטראקציה הזו.
חבילות שתואמות לחתימה של מסנן Intent
יכול להיות שהאפליקציה שלכם צריכה לשלוח שאילתות או ליצור אינטראקציה עם קבוצה של אפליקציות שמשרתות מטרה מסוימת, אבל אתם לא יודעים מהם שמות החבילות הספציפיים שצריך לכלול. במצב כזה, אפשר לפרט חתימות של מסנני כוונות באלמנט <queries>. האפליקציה שלכם יכולה לגלות אפליקציות עם רכיבי <intent-filter> תואמים.
בדוגמת הקוד הבאה מוצג רכיב <intent> שיאפשר לאפליקציה לראות אפליקציות מותקנות אחרות שתומכות בשיתוף תמונות בפורמט JPEG:
<manifest package="com.example.game"> <queries> <intent> <action android:name="android.intent.action.SEND" /> <data android:mimeType="image/jpeg" /> </intent> </queries> ... </manifest>
יש כמה הגבלות על הרכיב <intent>:
- חובה לכלול בדיוק רכיב
<action>אחד. - אי אפשר להשתמש במאפיינים
path,pathPrefix,pathPatternאוportברכיב<data>. המערכת מתנהגת כאילו הגדרתם את הערך של כל מאפיין לתו הכללי הגנרי (*). - אי אפשר להשתמש במאפיין
mimeGroupשל רכיב<data>. ברכיבי
<data>של רכיב<intent>יחיד, אפשר להשתמש בכל אחד מהמאפיינים הבאים פעם אחת לכל היותר:mimeTypeschemehost
אפשר להפיץ את המאפיינים האלה על פני כמה רכיבי
<data>או להשתמש בהם ברכיב<data>אחד.
הרכיב <intent> תומך בתו הכללי לחיפוש (*) כערך של כמה מאפיינים:
- המאפיין
nameשל הרכיב<action>. - סוג המשנה של מאפיין
mimeTypeשל רכיב<data>(image/*). - הסוג וסוג המשנה של מאפיין
mimeTypeשל רכיב<data>(*/*). - המאפיין
schemeשל רכיב<data>. - המאפיין
hostשל רכיב<data>.
אלא אם צוין אחרת ברשימה הקודמת, המערכת לא תומכת בשילוב של טקסט ותווים כלליים לחיפוש, כמו prefix*.
חבילות שמשתמשות בסמכות ספציפית
אם אתם צריכים לשלוח שאילתה לספק תוכן אבל לא יודעים את שמות החבילות הספציפיים, אתם יכולים להצהיר על סמכות הספק ברכיב <provider>, כמו שמוצג בקטע הקוד הבא:
<manifest package="com.example.suite.enterprise"> <queries> <provider android:authorities="com.example.settings.files" /> </queries> ... </manifest>
אפשר להצהיר על רשויות של ספקים ברכיב <queries> אחד. בתוך רכיב <queries>, אפשר להצהיר על רכיב <provider> אחד או יותר. רכיב A
<provider> יכול לכלול רשות אחת של ספק או רשימה של רשויות של ספקים שמופרדות באמצעות נקודה ופסיק.
כל האפליקציות (לא מומלץ)
במקרים נדירים, יכול להיות שהאפליקציה שלכם תצטרך לשלוח שאילתה או לבצע אינטראקציה עם כל האפליקציות המותקנות במכשיר, ללא קשר לרכיבים שהן מכילות. כדי לאפשר לאפליקציה לראות את כל האפליקציות המותקנות האחרות, המערכת מספקת את ההרשאה QUERY_ALL_PACKAGES.
דוגמאות לתרחישי שימוש שבהם מתאים לכלול את ההרשאה QUERY_ALL_PACKAGES:
- אפליקציות לנגישות
- דפדפנים
- אפליקציות לניהול מכשירים
- אפליקציות אבטחה
- אפליקציות אנטי-וירוס
עם זאת, בדרך כלל אפשר לממש את תרחישי השימוש באפליקציה באמצעות אינטראקציה עם קבוצת האפליקציות שגלויות באופן אוטומטי , ועל ידי הצהרה על האפליקציות האחרות שהאפליקציה צריכה לגשת אליהן בקובץ המניפסט. כדי לשמור על פרטיות המשתמשים, האפליקציה שלכם צריכה לבקש את כמות ההרשאות המינימלית שנדרשת כדי שהיא תפעל.
העדכון הזה במדיניות של Google Play כולל הנחיות לאפליקציות שזקוקות להרשאה QUERY_ALL_PACKAGES.