When I load my MapView application, the MapView only displays the grey grid lines.
Here is my Code:
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.google.android.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="#+id/map_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:apiKey="0aOphT3vlZFVSL1HZ2Vg-RmIDhH0nPlp8e7gJrg"/>
Manifest File:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.andoid.googlemaps"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="#drawable/icon" android:label="#string/app_name">
<uses-library android:name="com.google.android.maps"></uses-library>
<activity android:name=".GMapsActivity"
android:label="#string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="1" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>
Activity:
package com.andoid.googlemaps;
import android.os.Bundle;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
public class GMapsActivity extends MapActivity {
private MapView mapView;
/** Called when the activity is first created. */
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* Proxy Settings*/
System.setProperty("http.proxySet", "true");
System.setProperty("http.proxyHost", "proxy.example.com");
System.setProperty("http.proxyPort", "8080");
setContentView(R.layout.main);
mapView=(MapView)findViewById(R.id.map_view);
mapView.setBuiltInZoomControls(true);
}
#Override
protected boolean isRouteDisplayed() {
return false;
}
}
Thanks in advance for any help...
See the following link on displaying google map. This may help you
Tutorial on How to use Google map
The API key used for the map depends on the certificate used to sign your application.
You must follow the following instructions to get a valid API key.
The Android Maps API lets you embed Google Maps in your own Android applications. A single Maps API key is valid for all applications signed by a single certificate. See this documentation page for more information about application signing. To get a Maps API key for your certificate, you will need to provide its the certificate's fingerprint. This can be obtained using Keytool. For example, on Linux or Mac OSX, you would examine your debug keystore like this:
See Sign Up for the Android Maps API.
This often means that you need a key for debug-builds and another for release-builds (signed application package for Android market for example).
After a long time its worked. But still not got where was the problem actually,nothing i changed just i shared debug.keystore with my friend and its worked. Any way thanks for the reply...
Related
I do all the steps, I add google-play-sevices to my project,I do everything .I don't what's the problems.I create my api key using debug certificate fingerprint using SHA1 fingerprint in eclipse windows>preferences>android; I'm using lg E400 con android 2.3.6
MainActivity:
import android.os.Bundle;
import android.app.Activity;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.MapsInitializer;
public class MainActivity extends Activity {
GoogleMap map;
MapView m;
com.google.android.gms.maps.Projection projection;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
m=(MapView) findViewById(R.id.mapview);
m.onCreate(savedInstanceState);
map = m.getMap();
if (map != null) {
// The Map is verified. It is now safe to manipulate the map.
}else{
// check if google play service in the device is not available or out-dated.
GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
// nothing anymore, cuz android will take care of the rest (to remind user to update google play service).
}
try{map.getUiSettings().setMyLocationButtonEnabled(false);
map.setMyLocationEnabled(true);
}catch(Exception ex){ex.printStackTrace();}
MapsInitializer.initialize(this);
}
#Override
public void onResume() {
super.onResume();
m.onResume();
}
#Override
public void onDestroy() {
super.onDestroy();
m.onDestroy();
}
#Override
public void onLowMemory() {
super.onLowMemory();
m.onLowMemory();
}
#Override
public void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
m.onSaveInstanceState(outState);
}
}
layout:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<com.google.android.gms.maps.MapView
android:id="#+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</RelativeLayout>
manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.voicesee"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="15" />
<permission
android:name="com.example.voicesee.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="com.example.voicesee.permission.MAPS_RECEIVE" />
<!-- Copied from Google Maps Library/AndroidManifest.xml. -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<!-- The following two permissions are not required to use
Google Maps Android API v2, but are recommended. -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
<application
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme" >
<meta-data
android:name="com.google.android.gms.version"
android:value="#integer/google_play_services_version" />
<activity
android:name="com.example.voicesee.MainActivity"
android:label="#string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyAguDjIFiVWi18ll7Yh0oa8C7hWju1PUzI"/>
</application>
thanks for help!!
I had a similar problem, my issue was because I was picking the wrong debug keystore. I am working with an ubuntu machine. Since I opened eclipse as root, the default keystore in eclipse was located in my root folder(/root/.android/.android/debug.keystore) whiles I was creating the api key with the debug keystore from my user folder. I have added a link to the answered question:
Google Maps V2 shows blank screen on android 2.2
are you sure: your project in Google Console turn on the
Google Maps Android API v2
First, I don't understand why are you using a MapView when you are placing you map in the Acitivity because it's the harder way to display the map when you do so, Google's documentation states:
For a simpler method of displaying a Map use MapFragment (or SupportMapFragment) if you are looking to target earlier platforms.
Second, If you already do so, then you made some mistakes in implementing it because you place the:
MapsInitializer.initialize(this);
method in the wrong place, as the documentation states:
Use this class to initialize the Google Maps Android API if features need to be used before obtaining a map. It must be called because some classes such as BitmapDescriptorFactory and CameraUpdateFactory need to be initialized.
You will want to use a fragment to encase your map, and fragments are only supported by Android API levels 11 and up (3.0 and up). This is likely the cause of your problem.
As mentioned here, you need to use SupportMapFragment for your API version.
Here is the link to learn how to use it.
If that doesn't work, my guess is the API key. We had a situation before where the grid and the zoom buttons loaded and not the map, and the key was the culprit. I'd walk through the steps here to make sure you have done everything correctly (including using google play services)
In my code , i change mapview with supportMapfragment , i delete my previous debug.keytool and rebuilt it then i delete my old apikey and create a new key .It seems that my problem was the connection with google play service because it works after adding GooglePlayServicesUtil.isGooglePlayServicesAvailable() and verify the connection with google play services before calling setContentview()
once check your api key in manifest and SHA key of your application.. You can create new one by going to console.developers.google.com.
To see SHA key eclipse go to
--> windows>preferences>select android on left panel>click on build
To see SHA key android studio
see this link How to get the SHA-1 fingerprint certificate in Android Studio for debug mode?
I'm trying to develop android app which has two screens, and in the second I want google map to be shown...I read everything about this problem everywhere I could find and I did all steps to get API key, I edited Manifest xml file, the second screen xml file (where i want google maps)...provided API key, I set it in previously mentioned xml files, allowed using of internet etc... and still..the problem persists. If anynone has any idea what could be a problem, please answer !
Here's some code i wrote:
Manifest(xml) file:
<application
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme" >
<uses-library android:name="com.google.android.maps" />
<activity
android:name="com.example.androidgui.MainActivity"
android:label="#string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Mapa"
android:label="#string/screen2Title">
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="API_KEY"/>
</activity>
</application>
xml file of screen i want google maps to be displayed at:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.google.android.maps.MapView
android:id="#+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apiKey="API_KEY"
android:clickable="true"
/>
Java file of the screen :
package com.example.androidgui;
import android.app.Activity;
import android.os.Bundle;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
public class Mapa extends MapActivity{
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.secondscreen);
MapView mapview = (MapView) findViewById(R.id.mapview);
mapview.setBuiltInZoomControls(true);
}
#Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
You are trying to use deprecated Google Maps Android API v1 and mix it with Google Maps Android API v2 key.
The easiest way to start with v2 is removing all the code you have related to maps and following instructions here: https://developers.google.com/maps/documentation/android/start
I am new at Android. I have been trying from many days to make very basic google map application but unable to complete it yet...
There are no errors in code, emulator running fine from terminal, Map key also fine but still I am unable to see the map. When I run my app only grid appears and map is not displayed. Here is the code, can any body please help me.
i am using eclipse juno 4.2.1 api level 17 and i want to show map using google map api v2
My code is here
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.googlemap"
android:versionCode="1"
android:versionName="2.0" >
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<permission
android:name="com.example.googlemap.permission.MAPS_RECEIVE"
android:protectionLevel="signature"/>
<uses-permission android:name="com.example.mapdemo.permission.MAPS_RECEIVE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<application
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme" >
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="[API_KEY]"/>
<!-- <activity
android:name="com.example.googlemap.MainActivity"
android:label="#string/app_name">-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- </activity> -->
<!--<uses-library android:name="com.google.android.maps" />-->
</application>
</manifest>
main.xml
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="#+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.MapFragment"/>
MainActivity.java
package com.example.googlemap;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
protected boolean isRouteDisplayed() {
return false;
}
}
Your Manifest file is using Maps V2 and layout and Activity are using Maps V1. You are generating Maps API key using Maps V2 api key generation procedure and setting the same to Maps V1 MapView. So It will not display as it treat a wrong API Key.
Either you generate API key in V1 Key Generation Procedure or else use google-play-services_lib project and change the MapView and other Classes.
First, in your manifest file, modify this part into this below.
<activity
android:name="com.example.googlemap.MainActivity"
android:label="#string/app_name">-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<uses-library android:name="com.google.android.maps" />
Why did you block this part? Please make this part activate right now.
###
Second,please modify your main.xml into this below; You MUST specify if the layout file name is "main.xml" or "activity_main.xml".
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="#+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment"/>
You must use the above code. Because you set [android:minSdkVersion="8"] in your manifest file. Your main.xml is only useful for testing your settings in an application targeting Android API 12 or later .
###
Third, please modify your MainActivity,java into this below;
public class MianActivity extends android.support.v4.app.FragmentActivity {
private GoogleMap mMap;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setUpMapIfNeeded();
}
#Override
protected void onResume() {
super.onResume();
setUpMapIfNeeded();
}
private void setUpMapIfNeeded() {
if (mMap == null) {
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
.getMap();
if (mMap != null) {
setUpMap();
}
}
}
private void setUpMap() {
mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker"));
}
}
And in Eclipse, press Ctrl + Shift + O (alphabet) on your Keyboard and perform "organize imports" and then several classes will be imported automatically.
This code from #1 to #3 above is the standard basic code format to be able to see Google Maps on your real handset using new Google Maps API version 2. This code will show you a map and a marker on the map.
###
Four. The most important thing is to add two libraries to your project : one is Google Play service libs, the other is Android-support-v4.
HOW to add this two libraries to your project, see this document : Click here.
If you can not set two libraries, you can not see the map on your real handset.
###
Five, Try to run your project just on your real device(handset), not on the emulator in Eclipse. Because we can not see the map using the new Google Maps API v2 supported with Google Play service on the emulator, which is Google's official document :click here.
###
I hope you will see Google map on your real handset.
I also had a similar problem. This worked for me!
Go to Google API Console, where the API key was generated.
Click on services (appears on options in left).
Hover and search for Google Maps Android API v2.
Enable it (initially it was off hence only grey tiles appeared).
There are no errors in code, emulator running fine from terminal
Great ! But Window > Show View > Other > Android > Logcat !
The application may not crash but the Map API is telling you why the map can not be displayed in the logs.
To be sure you did well:
To implement the new Google Map API, Google released a non-complete guide. You can find it here.
I say non-complete because they do not clearly explain the setup of Google Play Services, but they do here.
Make sure you have this setup:
map.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
or whatever type you want....
I've made a very simple app that just displays a Google map. However, it only seems to be displaying gray squares.
I've troubleshooted and have done virtually everything I could. I checked my code 5+ times over, I've compared it even to other tutorials. I've re-made my API key 3 times - none of them work.
The phone I'm using is connected to wireless. Even the emulator won't work. I have the library and permission established in the manifest. I think I've done just about everything, but it still doesn't work... any suggestions?
Here's my code:
MapsActivity.java:
package net.learn2develop.GoogleMaps;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import android.os.Bundle;
public class MapsActivity extends MapActivity
{
/** Called when the activity is first created. */
#Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
#Override
protected boolean isRouteDisplayed() {
return false;
}
}
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.google.android.maps.MapView
android:id="#+id/mapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:clickable="true"
android:apiKey="0duU2_tgS67qkUZIpmLVIo0IDvJDh4Ew1Mzh9Pg"
/>
</RelativeLayout>
GoogleMapsManifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.learn2develop.GoogleMaps"
android:versionCode="1"
android:versionName="1.0.0">
<uses-sdk android:minSdkVersion="7" />
<application android:icon="#drawable/icon" android:label="#string/app_name">
<uses-library android:name="com.google.android.maps" />
<activity android:name=".MapsActivity"
android:label="#string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
You need to add
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
into you manifest
Note: If you are using both NETWORK_PROVIDER and GPS_PROVIDER, then you need to request only the ACCESS_FINE_LOCATION permission, because it includes permission for both providers. (Permission for ACCESS_COARSE_LOCATION includes permission only for NETWORK_PROVIDER.)
The problem was that Mike was using an API key generated with the release keystore instead of the debug keystore that eclipse uses when compiling the apk.
I had the same error ! I tried everything, so a try this tutorial below and it worked!!!!
TUTORIAL
i am unable to view maps on the emulator. I am under proxy internet connection, I also set the proxy via GUI and also have set api Key alongwith the perimissions and library.
here's my code:
package com.example.MyMapActivity;
import org.apache.http.HttpHost;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.impl.client.DefaultHttpClient;
import android.os.Bundle;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
public class MyMapActivity extends MapActivity {
private MapView mapview;
private MapController mapcontroller;
/** Called when the activity is first created. */
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DefaultHttpClient client = new DefaultHttpClient();
String proxyHost = android.net.Proxy.getHost(this);
if (proxyHost !=null) {
int proxyPort = android.net.Proxy.getPort(this);
HttpHost proxy = new HttpHost("*********", ***);
client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
}
//mapview = (MapView)findViewById(R.id.mapview);
}
#Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
// this method must return true if your app returns driving directions , else return false
return false;
}
}
The Layout file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.google.android.maps.MapView
android:id="#+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:clickable="true"
android:apiKey="***********"> </com.google.android.maps.MapView>
The mainfest file
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.MyMapActivity"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="#drawable/icon" android:label="#string/app_name">
<uses-library android:name="com.google.android.maps"></uses-library>
<activity android:name=".MyMapActivity"
android:label="#string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name ="android.permission.ACCESS_COARSE_LOCATION"/>
I faced the same problem and after a long time I found that I made a mistake in one digit while copying the md5, so the generator produced me a wrong api key. My suggestion is to make sure first that you have copied the correct md5.
If the emulator does not have Google Maps installed on it you can't use MapView or any other maps related activity.
You need need to make sure you create an emulator image which has the Google APIs available.
If the mapview is displayed but no maptiles are loaded it could be this bug ( Google Maps fails via mandatory web proxy) that is reported in the bug database from google. Read all the information about the issue carefully. It is very possible that this is an error on your side that you will never discover because you think it is googles fault.
Test the app somewhere without a proxy to confirm that it is working there.