Android Tutorial (old) Google Maps Android v2 tutorial

Status
Not open for further replies.
If you are using B4A v5.80+ then please follow this tutorial: https://www.b4x.com/android/forum/threads/google-maps.63930/#post-404386

GoogleMaps library requires v2.50 or above.

GoogleMaps library allows you to add Google maps to your application. This library requires Android 3+ and will only work on devices with Google Play service.

This tutorial will cover the configuration steps required for showing a map.

1. Download Google Play services - From the IDE choose Run AVD Manager and then choose Tools - SDK Manager. Select Google Play services under the Extras node and install it:

SS-2012-12-18_18.28.04.png


2. Copy google-play-services.jar to the libraries folder - This file is available under:
C:\<android sdk>\extras\google\google_play_services\libproject\google-play-services_lib\libs (ignore the extra space that the forum script insists on adding)
You should copy it to the libraries folder.

2.5. Download the attached library, unzip it and copy to the libraries folder.

3. Find the key signature - Your application must be signed with a private key other than the debug key. After you select a new or existing key file (Tools - Private Sign Key) you should reopen the private key dialog. The signature information will be displayed (increase the dialog size as needed).
The value after SHA1 is required for the next step:

SS-2012-12-18_18.11.34.png


4. Create an API project - Follow these steps and create an API project.
You should follow the steps under "Creating an API Project" and "Obtaining an API key".

Tips:
- Make sure to select "Google Maps Android API v2" in the services list and not one of the other similar services.
- Under "Simple API Access" you should select "Key for Android apps (with certificates".

5. Add the following code to the manifest editor:
B4X:
AddManifestText( <permission
          android:name="$PACKAGE$.permission.MAPS_RECEIVE"
          android:protectionLevel="signature"/>
      <uses-feature android:glEsVersion="0x00020000" android:required="true"/>)

AddApplicationText(<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="AIzaSyCzspmxxxxxxxxxxxxx"/>
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"
    />)
AddPermission(android.permission.ACCESS_NETWORK_STATE)
You should replace the value after android:value with the key you received in the previous step.

6. Add an #AdditionalRes attribute to the main activity:

You should add a reference to Google play resources by adding the following line:
B4X:
#AdditionalRes: <google-play-services res folder>, com.google.android.gms
For example:

#AdditionalRes: C:\android-sdk-windows\extras\google\google_play_services\libproject\google-play-services_lib\res, com.google.android.gms

Run the following code:
B4X:
'Activity module
Sub Process_Globals

End Sub

Sub Globals
   Dim mFragment As MapFragment
   Dim gmap As GoogleMap
   Dim MapPanel As Panel
End Sub

Sub Activity_Create(FirstTime As Boolean)
   MapPanel.Initialize("")
   Activity.AddView(MapPanel, 0, 0, 100%x, 100%y)
   If mFragment.IsGooglePlayServicesAvailable = False Then
      ToastMessageShow("Google Play services not available.", True)
   Else
      mFragment.Initialize("Map", MapPanel)
   End If
End Sub
Sub Map_Ready
   Log("map ready")
   gmap = mFragment.GetMap
   If gmap.IsInitialized = False Then
      ToastMessageShow("Error initializing map.", True)
   Else
      gmap.AddMarker(36, 15, "Hello!!!")
      Dim cp As CameraPosition
      cp.Initialize(36, 15, gmap.CameraPosition.Zoom)
      gmap.AnimateCamera(cp)
   End If
End Sub

You should see:

SS-2012-12-18_18.25.14.png


If you see a "white map" then there is most probably a mismatch between the: package name, sign key and the API key (from the manifest editor).

Google documentation: https://developers.google.com/maps/documentation/android/intro
Note that there is a required attribution which you must include in your app (see above link). You can get the string by calling MapFragment.GetOpenSourceSoftwareLicenseInfo.

V1.01: Fixes a bug in AddMarker2.
 

Attachments

  • GoogleMaps.zip
    17.8 KB · Views: 11,573
Last edited:

marcick

Well-Known Member
Licensed User
Longtime User
To change the icon of an existing marker you need to remove it and place a new one
 

mujeeb74

Member
Licensed User
Longtime User
To change the icon of an existing marker you need to remove it and place a new one
but this a first marker initialize
do i need to use following code:
m = gmap.AddMarker(37, 16, "2")
m = gmap.AddMarker3(37, 16, "2",LoadBitmap(File.DirAssets,"red.png"))
or can you give example please
 

marcick

Well-Known Member
Licensed User
Longtime User
I'm trying now the LongTextExample of Klaus, but also declaring 20.000 as height for LblText, the googlemap disclaimer obtained with "MapFragment.GetOpenSourceSoftwareLicenseInfo" is truncated at the end.
It seems to me that the string is too long to be read by txt=MapFragment.GetOpenSourceSoftwareLicenseInfo
Any help ?
 

marcick

Well-Known Member
Licensed User
Longtime User
The text obtained from the function MapFragment.GetOpenSourceSoftwareLicenseInfo is a very long string. Scrolling down the panel I see tenth of rows but at a certain point it stops and is unreadable til the real end.
 

marcick

Well-Known Member
Licensed User
Longtime User
Klaus, if I try to log that string, the log also is truncated because it's more than 4000 chars.
Where could be the problem, that a string couldn't be longer than 4000 chars or the label control that can't manage it ?
Marco
 

marcick

Well-Known Member
Licensed User
Longtime User
here I'm.
The string TXT contain effectively all the text, but It seems the label control can't be high enough to contain all the rows. If I declare it larger (so the text occupy less rows) I can read all the text.
But this is ok on a tablet. The same code on a smartphone does not show all the text because it require more rows.
Any solution ?
 

marcick

Well-Known Member
Licensed User
Longtime User
Hi Klaus,
the scrollview is set to 80% of the screen height and the label height I have increased to 20.000 but has no effect (I think the height is clipped above a limit). That function returns 11786, but label.height of 20.000 does not show all text.
 

marcick

Well-Known Member
Licensed User
Longtime User
Ouch ..... you are right (of course).
Works perfect now, thank you very much.
Marco
 

synapse

Member
Licensed User
Longtime User
With the mapsforgetileprovider demo am getting, after mapfragment1_Ready an error:

Cannot get methods of class: uk.co.martinpearman.b4a.googlemapsextras.GoogleMapsExtras, disabling cache.

Any advice on this please?
 

marcick

Well-Known Member
Licensed User
Longtime User
Just to add further info, I have this error too, but only when I use debug_rapid.
 

synapse

Member
Licensed User
Longtime User
Can I get any lead on an error with mapsforgetileprovider demo?

After Mapfragment1_Ready is logged I get

'Cannot get methods of class: uk.co.martinpearman.b4a.googlemapsextras.GoogleMapsExtras, disabling cache'

Libraries are all there and up to date...

Thanks
 

warwound

Expert
Licensed User
Longtime User
Well i've not yet had a chance to use the new 'rapid debug' mode so can't really comment.
All i can say is if it works in release and legacy debug mode then it's likely to not be a bug.

Martin.
 
Status
Not open for further replies.
Top