Archive for November, 2011

How to centering google map on Balloon center in Android

If you click (tap) the balloon on Android Google Maps in your application, and want to centering map on center of balloon. You need to look this post.

Below you can download the source code of sample Android project.

The secret in Utils class. Below you can see the source of this class

package com.hrupin.lazymarkers;

import android.content.Context;
import android.util.DisplayMetrics;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;

public class Utils {
	private static final int BALLOON_OFFSET_IN_DP = 150;
	private static final double EQUATRE_LENGTH_IN_KM = 40075.7;
	private static final double EARTH_RADIUS_IN_KM = 6356.8;
	private static DisplayMetrics metrics = null;
	private static float density;
	
	public static GeoPoint getBalloonCenterCoords(GeoPoint markerGeoPoint, MapView mapView) {
		int zoom = mapView.getZoomLevel();
		int balloonOffset = getOffsetInDegreesE6(zoom, dpToPxConverter(mapView.getContext(), BALLOON_OFFSET_IN_DP));
		int balloonCenterLatitude = markerGeoPoint.getLatitudeE6() + balloonOffset;
		return new GeoPoint(balloonCenterLatitude, markerGeoPoint.getLongitudeE6());
	}
	
	private static int getOffsetInDegreesE6(int zoom, int offsetInPx) {
		// 256 - equator length on map if zoom level = 0
		double equatreLengthOnMapInPx = (double)256 * Math.pow(2, zoom);
		double earthRadiusOnMapInPx = (equatreLengthOnMapInPx * EARTH_RADIUS_IN_KM) / EQUATRE_LENGTH_IN_KM;
		double tangensValue = (double)offsetInPx / earthRadiusOnMapInPx;
		double offsetInDegrees = Math.toDegrees(Math.atan(tangensValue));		
		return (int)(offsetInDegrees * 1E6);
	}

	private static int dpToPxConverter(Context context, int dp){
		if (metrics == null) {
			metrics  = context.getResources().getDisplayMetrics();
			density = metrics.density;
		}
		return (int) (density * dp + 0.5f);
	}
}

Please tell me if you know other solution.

Hope it help you!

Download source code.Here you can download the source code of sample Android project.

Tags: , ,

How to Clear User Data in your Android Application programmatically

How to clear user data of your application programmatically? Here I share you my solution how to do this.

You also can clear your user data by clicking “Clear Data” button in Settings–>Applications–>Manage Aplications–> YOUR APPLICATION
Application Info Android Dialog

To do it programmatically you need to remove user data from application dir.

Below you can download source code of sample Android project.

Pay attention in MyApplication class:

package com.hrupin.cleaner;

import java.io.File;

import android.app.Application;
import android.util.Log;

public class MyApplication extends Application {
	private static MyApplication instance;

	@Override
	public void onCreate() {
		super.onCreate();
		instance = this;
	}

	public static MyApplication getInstance() {
		return instance;
	}

	public void clearApplicationData() {
		File cache = getCacheDir();
		File appDir = new File(cache.getParent());
		if (appDir.exists()) {
			String[] children = appDir.list();
			for (String s : children) {
				if (!s.equals("lib")) {
					deleteDir(new File(appDir, s));
					Log.i("TAG", "**************** File /data/data/APP_PACKAGE/" + s + " DELETED *******************");
				}
			}
		}
	}

	public static boolean deleteDir(File dir) {
		if (dir != null && dir.isDirectory()) {
			String[] children = dir.list();
			for (int i = 0; i < children.length; i++) {
				boolean success = deleteDir(new File(dir, children[i]));
				if (!success) {
					return false;
				}
			}
		}

		return dir.delete();
	}
}

Download source code. Here you can download sample project.

Tags:

Hire me!