באפליקציית מפות Google ל-Android יש כמה כוונות שאפשר להשתמש בהן כדי להפעיל את מפות Google במצב תצוגה, חיפוש, ניווט או Street View. אם אתם רוצים להטמיע מפה באפליקציה, היעזרו במדריך לתחילת העבודה של מפות Google ל-Android API.
סקירה
אובייקטים מסוג Intent מאפשרים להתחיל פעילות באפליקציה אחרת על ידי תיאור פעולה פשוטה שאתם רוצים לבצע (למשל, "הצגת מפה" או "הצגת מסלול לנמל התעופה") באובייקט Intent
. אפליקציית מפות Google ל-Android תומכת בכמה כוונות שונות, ומאפשרת להפעיל את האפליקציה מפות Google ולבצע אחת מתוך ארבע פעולות:
- הצגת מפה במיקום ספציפי וברמת זום.
- מחפשים מיקומים או מקומות ומציגים אותם במפה.
- מבקשים מסלול ממיקום אחד למיקום אחר. אפשר להחזיר מסלולים לשלושה אמצעי תחבורה: נהיגה, הליכה ורכיבה על אופניים.
- הצגת תמונות פנורמה ב-Google Street View.
בדף זה מתוארות ה-Intents שאפשר להשתמש בהם באפליקציית מפות Google ל-Android. מידע נוסף על מסנני Intent ו-Intent או אובייקטים נפוצים בפלטפורמת Android זמין במאמרי העזרה למפתחים של Android.
בקשות של Intent
כדי להפעיל את מפות Google מתוך Intent, קודם צריך ליצור אובייקט Intent
ולציין את הפעולה, ה-URI והחבילה שלו.
- פעולה: כל הכוונות של מפות Google נקראות כפעולת צפייה —
ACTION_VIEW
. - URI: הפורמט של Intent במפות Google מבוסס על קידוד כתובת URL שמציין את הפעולה הרצויה, יחד עם נתונים מסוימים שאיתם אפשר לבצע את הפעולה.
- חבילה: התקשרות אל
setPackage("com.google.android.apps.maps")
תבטיח שאפליקציית מפות Google ל-Android מטפלת ב-Intent. אם החבילה לא מוגדרת, המערכת תקבע אילו אפליקציות יכולות לטפל ב-Intent
. אם יש כמה אפליקציות זמינות, ייתכן שהמשתמש יתשאל באיזו אפליקציה הוא רוצה להשתמש.
אחרי שיוצרים את Intent
, אפשר לבקש מהמערכת להפעיל את האפליקציה הקשורה בכמה דרכים. שיטה נפוצה היא להעביר את Intent
ל-method startActivity()
. המערכת תפעיל את האפליקציה הדרושה – במקרה הזה, מפות Google - ותפעיל את הפקודה Activity
המתאימה.
Java
// Create a Uri from an intent string. Use the result to create an Intent. Uri gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988"); // Create an Intent from gmmIntentUri. Set the action to ACTION_VIEW Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); // Make the Intent explicit by setting the Google Maps package mapIntent.setPackage("com.google.android.apps.maps"); // Attempt to start an activity that can handle the Intent startActivity(mapIntent);
Kotlin
// Create a Uri from an intent string. Use the result to create an Intent. val gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988") // Create an Intent from gmmIntentUri. Set the action to ACTION_VIEW val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) // Make the Intent explicit by setting the Google Maps package mapIntent.setPackage("com.google.android.apps.maps") // Attempt to start an activity that can handle the Intent startActivity(mapIntent)
אם המערכת לא יכולה לזהות אפליקציה שיכולה להגיב לכוונה, האפליקציה עלולה לקרוס. לכן כדאי לוודא שהאפליקציה המקבלת מותקנת לפני שמציגים למשתמש את אחת מהכוונות האלה.
כדי לוודא שאפליקציה זמינה לקבלת ה-Intent, קוראים ל-resolveActivity()
על האובייקט Intent
. אם התוצאה היא לא null, יש לפחות אפליקציה אחת שיכולה לטפל בכוונה, ואפשר לקרוא ל-startActivity()
בבטחה.
אם התוצאה היא null
, לא כדאי להשתמש ב-Intent, ואם אפשר, להשבית את התכונה שמפעילה את הכוונה.
Java
if (mapIntent.resolveActivity(getPackageManager()) != null) { ... }
Kotlin
mapIntent.resolveActivity(packageManager)?.let { ... }
לדוגמה, כדי להציג מפה של סן פרנסיסקו אפשר להשתמש בקוד הבא:
Java
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); if (mapIntent.resolveActivity(getPackageManager()) != null) { startActivity(mapIntent); }
Kotlin
val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") mapIntent.resolveActivity(packageManager)?.let { startActivity(mapIntent) }
מחרוזות שאילתה המקודדות בכתובת URL
כל המחרוזות שמועברות ל-Intents של מפות Google חייבות להיות מקודדות ב-URI. לדוגמה, המחרוזת "1st & Pike, Seattle" צריכה להיות 1st%20%26%20Pike%2C%20Seattle
.
אפשר לקודד רווחים במחרוזת באמצעות %20 או להחליף אותם בסימן הפלוס (+).
אפשר להשתמש בשיטה android.net.Uri
parse()
כדי לקודד את המחרוזות.
למשל:
Java
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4192?q=" + Uri.encode("1st & Pike, Seattle"));
Kotlin
val gmmIntentUri = Uri.parse("geo:37.7749,-122.4192?q=" + Uri.encode("1st & Pike, Seattle"))
הצגת מפה
יש להשתמש ב-Intent geo:
כדי להציג מפה במיקום ובזום שצוינו.
geo:latitude,longitude?z=zoom
פרמטרים
latitude
ו-longitude
הגדירו את נקודת המרכז של המפה.z
מגדיר את רמת הזום הראשונית של המפה. הערכים הקבילים נעים בין 0 (בכל העולם) ל-21 (מבנים נפרדים). מגבלת המקסימום יכולה להשתנות בהתאם לנתוני המפה שזמינים במיקום שנבחר.
דוגמאות
Java
// Creates an Intent that will load a map of San Francisco Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
// Creates an Intent that will load a map of San Francisco val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
חיפוש מיקום
יש להשתמש בהכוונה הזו כדי להציג שאילתות חיפוש בתוך אזור תצוגה מסוים. אם לשאילתה יש תוצאה אחת, תוכלו להשתמש בכוונה הזו כדי להציג סיכה במקום או בכתובת מסוימים, כמו ציון דרך, עסק, מקום גיאוגרפי או עיר.
geo:latitude,longitude?q=query geo:0,0?q=my+street+address geo:0,0?q=latitude,longitude(label)
פרמטרים
בנוסף לפרמטרים שמשמשים להצגת מפה, החיפוש תומך בפרמטרים הבאים:
q
מגדיר את המקומות שברצונך להדגיש במפה. הפרמטרq
נדרש לכל בקשות החיפוש. הוא מקבל מיקום בתור שם או כתובת של מקום. המחרוזת צריכה להיות בקידוד כתובת URL, ולכן צריך להמיר כתובת כמו "City Hall, New York, NY" ל-City+Hall,New+York,NY.label
מאפשרת להגדיר תווית מותאמת אישית במקום שמזוהה במפה. צריך לציין אתlabel
כמחרוזת.
חיפוש קטגורי
אם אתם מעבירים מונח חיפוש כללי, אפליקציית מפות Google תנסה למצוא מיקום שתואם לקריטריונים שציינתם ליד קו הרוחב/האורך שציינתם. אם לא צוין מיקום, אפליקציית מפות Google תנסה למצוא דפים עסקיים בקרבת מקום. למשל:
Java
// Search for restaurants nearby Uri gmmIntentUri = Uri.parse("geo:0,0?q=restaurants"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent); // Search for restaurants in San Francisco Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=restaurants"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
// Search for restaurants nearby val gmmIntentUri = Uri.parse("geo:0,0?q=restaurants") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent) // Search for restaurants in San Francisco val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=restaurants") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
אפשר להטות את תוצאות החיפוש עוד יותר על ידי ציון פרמטר של שינוי מרחק התצוגה יחד עם מחרוזת השאילתה. בדוגמה הבאה, אם מוסיפים זום של 10, המערכת תנסה למצוא מסעדות ברמת העיר ולא בקרבת מקום.
Java
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?z=10&q=restaurants"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?z=10&q=restaurants") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
חיפוש מיקום
חיפוש של כתובת ספציפית יוביל להצגה של סיכה במיקום הזה.
Java
Uri gmmIntentUri = Uri.parse("geo:0,0?q=1600 Amphitheatre Parkway, Mountain+View, California"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
val gmmIntentUri = Uri.parse("geo:0,0?q=1600 Amphitheatre Parkway, Mountain+View, California") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
הדוגמה שלמעלה מגדירה את קו הרוחב/אורך של 0
,0
, אבל מעבירה את הכתובת כמחרוזת שאילתה. כשמחפשים מיקום ספציפי מאוד, אין צורך לציין את קו הרוחב וקו האורך. עם זאת, אם לא יודעים את הכתובת המדויקת, אפשר לנסות להטות את תוצאות החיפוש על ידי ציון קואורדינטה. לדוגמה, חיפוש כתובת של 'הרחוב הראשי' יחזיר יותר מדי תוצאות.
Java
// Searching for 'Main Street' will return too many results Uri gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street");
Kotlin
// Searching for 'Main Street' will return too many results val gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street")
הוספה של קו רוחב/lng ל-URI של Intent תגרום להטיית התוצאות לאזור מסוים:
Java
// Searches for 'Main Street' near San Francisco Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=101+main+street"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
// Searches for 'Main Street' near San Francisco val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=101+main+street") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
אם אתם יודעים שהחיפוש יחזיר ערך יחיד, כדאי להעביר תווית אופציונלית. את התוויות צריך לציין כמחרוזת והן יופיעו מתחת לסמן המפה. שימו לב שהתוויות זמינות רק אם מציינים את q
כקואורדינטה קווית/lng.
Java
// Display a label at the location of Google's Sydney office Uri gmmIntentUri = Uri.parse("geo:0,0?q=Google+Sydney@-33.8666,151.1957"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
// Display a label at the location of Google's Sydney office val gmmIntentUri = Uri.parse("geo:0,0?q=-33.8666,151.1957(Google+Sydney)") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
כחלופה לכתובת, או לקו רוחב או לקו אורך, אפשר להציג סיכה במיקום ידוע באמצעות Plus Code.
Java
// Display the location of Google, San Francisco using a global plus code. Uri gmmIntentUri = Uri.parse("http://plus.codes/849VQJQ5+XX"); // Equivalently, define the same location using a local plus code gmmIntentUri = Uri.parse("https://plus.codes/QJQ5+XX,San%20Francisco"); // Construct and use the Intent as in the examples above
Kotlin
// Display the location of Google, San Francisco using a global plus code. var gmmIntentUri = Uri.parse("http://plus.codes/849VQJQ5+XX") // Equivalently, define the same location using a local plus code gmmIntentUri = Uri.parse("https://plus.codes/QJQ5+XX,San%20Francisco") // Construct and use the Intent as in the examples above
מתבצעת הפעלה של ניווט במסלול מפורט
השתמש בהכוונה הזו כדי להפעיל ניווט במפות Google עם מסלול מפורט לכתובת או לקואורדינטה שצוינו. המסלול תמיד מוצג מהמיקום הנוכחי של המשתמש.
google.navigation:q=a+street+address google.navigation:q=latitude,longitude
פרמטרים
q
: מגדיר את נקודת הסיום של חיפושי ניווט. הערך הזה יכול להיות קואורדינטות של קו רוחב, קו אורך או כתובת בפורמט של שאילתה. אם זו מחרוזת שאילתה שמחזירה יותר מתוצאה אחת, התוצאה הראשונה תיבחר.אמצעי התחבורה נקבע על ידי
mode
. Mode הוא אופציונלי, ואפשר להגדיר אותו לאחת מהאפשרויות הבאות:d
לנהיגה (ברירת מחדל)b
לרכיבה על אופנייםl
לרכב דו-גלגליw
להליכה
avoid
מגדיר תכונות שהמסלול צריך להימנע מהן. האפשרות להימנע היא אופציונלית ואפשר להגדיר אותה לאחת או יותר מהאפשרויות הבאות:t
לכבישי אגרהh
לכבישים מהיריםf
למעבורות
דוגמאות
בקשת הניווט של Intent
שלמטה תבקש מסלול מפורט לגן החיות טארונגה שבסידני אוסטרליה:
Java
Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
val gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
אם אתם מעדיפים לא לשלם על כבישי אגרה או לנסוע במעבורת, תוכלו לבקש שמסלול זה לא יקרה.
Java
Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&avoid=tf"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
val gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&avoid=tf") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
אם אתם מעדיפים פעילות גופנית קלה, אפשר לבקש מסלול לרכיבה על אופניים במקום זאת.
Java
Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&mode=b"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
val gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&mode=b") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
אם אתם מעדיפים להשתמש ברכב דו-גלגלי ממונעים, תוכלו לבקש שהמסלולים יכללו כבישים צרים ושבילים שאינם זמינים לרכבים. הפונקציה intent
שבהמשך מחזירה
מסלול בהודו.
Java
Uri gmmIntentUri = Uri.parse("google.navigation:q=Connaught+Place,+New+Delhi,Delhi&mode=l"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
val gmmIntentUri = Uri.parse("google.navigation:q=Connaught+Place,+New+Delhi,Delhi&mode=l") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
הצגה של תמונת פנורמה ב-Street View
צריך להשתמש ב-Intent google.streetview
כדי להפעיל את Google Street View. Google Street View מאפשר לצלם תמונות פנורמיות ממיקומים ייעודיים בכל אזור הכיסוי.
גם תמונות פנורמיות ב-360° ואוספים מיוחדים של Street View זמינים גם הם.
google.streetview:cbll=latitude,longitude&cbp=0,bearing,0,zoom,tilt google.streetview:panoid=id&cbp=0,bearing,0,zoom,tilt
פרמטרים
כל מזהי ה-URI של google.streetview
חייבים לכלול את הפרמטר cbll
או את הפרמטר panoid
.
cbll
מקבל קווי אורך ורוחב כערכים מופרדים בפסיקים (46.414382,10.013988
). האפליקציה תציג את התמונה הפנורמית בצילום הקרוב ביותר למיקום הזה. מכיוון שהתמונות ב-Street View מרעננות מדי פעם, והתמונות עשויות להיות צולמו במיקומים שונים מעט בכל פעם, לכן ייתכן שהמיקום שלכם יופנה לפנורמה אחרת לאחר עדכון התמונות.panoid
הוא מזהה ספציפי של פנורמה. אפליקציית מפות Google תשתמש במזהה הפנורמה אם צוינוpanoid
וגםcbll
. מזהי פנורמה זמינים לאפליקציה ל-Android מהאובייקטStreetViewPanoramaLocation
.cbp
הוא פרמטר אופציונלי שמתאים את הכיוון הראשוני של המצלמה. הפרמטרcbp
מקבל 5 ערכים שמופרדים בפסיקים, וכולם אופציונליים. הערכים המשמעותיים ביותר הם הערך השני, הרביעי והחמישי שקובעים את הכיוון, הזום וההטיה בהתאמה. הערך הראשון והשלישי לא נתמכים, וצריך להגדיר אותם כ-0
.bearing
: מציין את כיוון המצפן של המצלמה במעלות מצפון בכיוון השעון. הצפון האמיתי הוא 0, המזרח הוא 90, הדרום הוא 180, המערב הוא 270. הערכים שיועברו לנשיאה יגלשו באותו הכיוון, כלומר 0°, 360° ו-720°. נושא ההגדרה הוא השני מתוך חמישה ערכים שמופרדים בפסיקים.zoom
: מגדיר את רמת הזום של המצלמה. רמת ברירת המחדל של מרחק התצוגה מוגדרת כ-0. זום של 1 יכפיל את ההגדלה. הזום מוצמד בין 0 לבין רמת הזום המקסימלית של הפנורמה הנוכחית. כלומר, כל ערך שחורג מהטווח הזה יוגדר בתור הקיצון הקרוב ביותר שנמצא בתוך הטווח. לדוגמה: הערך 1- יוגדר כ-0. מרחק התצוגה הוא הרביעי מתוך חמישה ערכים שמופרדים בפסיקים.tilt
: מציין את הזווית של המצלמה, למעלה או למטה. הטווח הוא בין -90 לבין 0 עד 90, כאשר 90 מסתכלים ישר למטה, 0 ממורכזים באופק ו-90 מסתכלים ישר למעלה.
דוגמאות
בהמשך מפורטות כמה דוגמאות לשימוש ב-Intent של Street View.
Java
// Displays an image of the Swiss Alps Uri gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent); // Uses a PanoID to show an image from Maroubra beach in Sydney, Australia Uri gmmIntentUri = Uri.parse("google.streetview:panoid=Iaa2JyfIggYAAAQfCZU9KQ"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent); // Opens Street View between two Pyramids in Giza. The values passed to the // cbp parameter will angle the camera slightly up, and towards the east. Uri gmmIntentUri = Uri.parse("google.streetview:cbll=29.9774614,31.1329645&cbp=0,30,0,0,-15"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
// Displays an image of the Swiss Alps val gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent) // Uses a PanoID to show an image from Maroubra beach in Sydney, Australia val gmmIntentUri = Uri.parse("google.streetview:panoid=Iaa2JyfIggYAAAQfCZU9KQ") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent) // Opens Street View between two Pyramids in Giza. The values passed to the // cbp parameter will angle the camera slightly up, and towards the east. val gmmIntentUri = Uri.parse("google.streetview:cbll=29.9774614,31.1329645&cbp=0,30,0,0,-15") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)