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