About App:--This is a simple app which find the user current location.
Problem:-- The app works fine on emulator please see the image.
But in phone it is not showing the MapView.Please see the image.
Please tell me what is going wrong with the phone. In Phone it just download the huge(20 mb) data but not show the actual map.
Logcat im getting -
10-31 16:44:45.994: E/MapActivity(3026): Couldn't get connection factory client
10-31 15:47:42.319: ERROR/MapView(1773): java.lang.IllegalStateException: Null Bitmap! "loading_tile"; if seen during a test, this usually means that the image file needs to be added to the test.config file
XML FILE
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/myLocationText"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<com.google.android.maps.MapView
android:id="@+id/myMapView"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:clickable="true"
android:enabled="true"
android:apiKey="0bBgLl42nWwnTf983Y5VdIgfZI6mC7meL7Ms_qg"/>
</LinearLayout>
Code
public class WhereIam extends MapActivity {
MapController mapController;
MyPositionOverlay positionOverlay;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MapView myMapView=(MapView)findViewById(R.id.myMapView);
mapController=myMapView.getController();
myMapView.setSatellite(true);
myMapView.setStreetView(true);
myMapView.displayZoomControls(false);
myMapView.setBuiltInZoomControls(true);
mapController.setZoom(16);
positionOverlay = new MyPositionOverlay();
List<Overlay> overlays = myMapView.getOverlays();
overlays.add(positionOverlay);
LocationManager locationManager;
String context=Context.LOCATION_SERVICE;
locationManager=(LocationManager)getSystemService(context);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);
String provider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(provider);
final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
updateWithNewLocation(location);
}
public void onProviderDisabled(String provider){
updateWithNewLocation(null);
}
public void onProviderEnabled(String provider){ }
public void onStatusChanged(String provider, int status,
Bundle extras){ }
};
updateWithNewLocation(location);
locationManager.requestLocationUpdates(provider, 2000, 10,
locationListener);
}
private void updateWithNewLocation(Location location) {
String latLongString;
TextView myLocationText;
String addressString ="No Address Found";
myLocationText=(TextView)findViewById(R.id.myLocationText);
if(location!=null) {
// Update the map location.
positionOverlay.setLocation(location);
Double geoLat = location.getLatitude()*1E6;
Double geoLng = location.getLongitude()*1E6;
GeoPoint point = new GeoPoint(geoLat.intValue(),
geoLng.intValue());
mapController.animateTo(point);
double lat=location.getLatitude();
double lng=location.getLongitude();
latLongString = "Lat:" + lat + "\nLong:" + lng;
Geocoder gc=new Geocoder(this, Locale.getDefault());
try {
List<Address> addressess= gc.getFromLocation(lat, lng, 1);
StringBuilder sb=new StringBuilder();
if(addressess.size()>0) {
Address address=addressess.get(0);
for(int i=0;i<address.getMaxAddressLineIndex();i++) {
sb.append(address.getAddressLine(i)).append("\n");
sb.append(address.getLocality()).append("\n");
sb.append(address.getPostalCode()).append("\n");
sb.append(address.getCountryName());
}
addressString = sb.toString();
}
}catch(IOException e) {}
}
else {
latLongString="No Found Location";
}
myLocationText.setText("Your current Location is \n"+latLongString+"\n"+addressString);
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
I just crated one api key as follow goto->cmd prompt
change the directory to the keytool folder
now run the command keytool -list -alias androiddebugkey -keystore "C:\Users\pc.android\debug.keystore" -storepass android -keypass android
see the image
Now i goto signup page i simply put the MD5 in EditText and checked accept and clicked generate key then following page comes up which show the key--
Now i put this key in my MapView Xml file..
as you can see app running fine in emulator but not in real phone.
Where am I going wrong, and how do I generate a second API key for a real phone?