Sunday, September 9, 2012

Android Device specific unique id generation


//generate unique id..
public static String getUniqueID(Context context) {

TelephonyManager telephonyManager = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);

String uniqueID = null;

//http://developer.android.com/reference/android/provider/Settings.Secure.html#ANDROID_ID
uniqueID = android.provider.Settings.Secure.getString(
context.getContentResolver(),
android.provider.Settings.Secure.ANDROID_ID);

if (uniqueID == null) {

String deviceID = "" + telephonyManager.getDeviceId();
String simSerialID = "" + telephonyManager.getSimSerialNumber();
String androidID = ""
+ android.provider.Settings.Secure.getString(
context.getContentResolver(),
android.provider.Settings.Secure.ANDROID_ID);

UUID deviceUuid = new UUID(androidID.hashCode(), ((long) deviceID
.hashCode() << 32)
| simSerialID.hashCode());

if (deviceUuid.toString() != null) {
uniqueID = ((deviceUuid.toString().length() > 0) && (deviceUuid
.toString().length() >= 32)) ? deviceUuid.toString()
.substring(0, 32) : deviceUuid.toString();
}
}
return uniqueID;
}

Sometimes, I have found that the unique id generation for a android device fails. In this case this function is pretty useful as a alternate way of generating a unique id.

Android Activity Navigate Helper

This Navigator class helps to easily navigate from one activity to another including passing parameters. It also  dose the navigate back to a previous activity as well. With the use of the HashMap object you can pass  serializable objects to other activities.

public class Navigator {

 //navigate form one activity to another with passing parameters
public static void Navigate(Activity activityFrom, Class classTo,
HashMap<String, Serializable> params) {

Controller.instance().PrevActStack().push(
activityFrom.getClass().getName());

Intent intentNavigateTo = new Intent(activityFrom, classTo);
intentNavigateTo.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Set set = params.entrySet();
Iterator iterator = set.iterator();

while (iterator.hasNext()) {

Map.Entry me = (Map.Entry) iterator.next();
intentNavigateTo.putExtra((String) me.getKey(), (Serializable) me
.getValue());
}

activityFrom.startActivityForResult(intentNavigateTo, 0);
activityFrom.finish();
params.clear();

}

//navigate form one activity to another without passing parameters
public static void Navigate(Activity activityFrom, Class classTo) {

Controller.instance().PrevActStack().push(
activityFrom.getClass().getName());
Intent intentNavigateTo = new Intent(activityFrom, classTo);
intentNavigateTo.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activityFrom.startActivity(intentNavigateTo);
activityFrom.finish();
}

 //navigate back to previous activity with passing parameters
public static void NavigateBack(Activity activityFrom,
HashMap<String, Serializable> params) throws Exception {

if (Controller.instance().PrevActStack().size() == 0) {
throw new Exception("No previous activity found !!");
}

Intent intentNavigateBackTo = new Intent(activityFrom, Class
.forName(Controller.instance().PrevActStack().pop()));

intentNavigateBackTo.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Set set = params.entrySet();
Iterator iterator = set.iterator();

while (iterator.hasNext()) {

Map.Entry me = (Map.Entry) iterator.next();
intentNavigateBackTo.putExtra((String) me.getKey(),
(Serializable) me.getValue());
}

activityFrom.startActivity(intentNavigateBackTo);
activityFrom.finish();
params.clear();

}

 //navigate back to previous activity without passing parameters
public static void NavigateBack(Activity activityFrom) throws Exception {

if (Controller.instance().PrevActStack().size() == 0) {
throw new Exception("No previous activity found !!");
}

Intent intentNavigateBackTo = new Intent(activityFrom, Class
.forName(Controller.instance().PrevActStack().pop()));
intentNavigateBackTo.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activityFrom.startActivity(intentNavigateBackTo);
activityFrom.finish();
}

}