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