כשיוצרים אפליקציה, חשוב לקחת בחשבון את האפליקציות האחרות במכשיר שהאפליקציה צריכה לבצע איתן אינטראקציה. אם האפליקציה מטרגטת ל-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
יכול להיות שהאפליקציה שלכם צריכה לשלוח שאילתות או ליצור אינטראקציה עם קבוצה של אפליקציות שמשרתות מטרה מסוימת, אבל אתם לא יודעים מהם שמות החבילות הספציפיים שצריך לכלול. במקרה כזה, אפשר לפרט חתימות של מסנני 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.