Know if your app is running on a phone or tablet
Monkey Targets Forums/Android/Know if your app is running on a phone or tablet| 
 | ||
| Is there a way of knowing if you app is running on a Tablet or phone? There are a lot of cheap 7" tablets out there that run at 800x480 same as my 3.7" phone and some expensive 4-5" phones that run at 1280x768 same as my 7" nexus 7. Would be nice to know the screen dimensions or DPI so I can scale text etc appropriately. | 
| 
 | ||
| http://developer.android.com/guide/practices/screens_support.html#testing http://developer.android.com/about/dashboards/index.html | 
| 
 | ||
| I'm using this little function to detect if my app is running on a tablet or phone. Worked for me on my HTC OneX (1280px x 800px), Acer Iconia Tab A501 (1280px x 800px) and HTC Desire S (800px x 480px) | 
| 
 | ||
| What happens when Mobile screens have the same resolution/DPI as Tablets? ;) This is from Google's own code:     public static boolean isTablet(Context context) {
        return (context.getResources().getConfiguration().screenLayout
                & Configuration.SCREENLAYOUT_SIZE_MASK)
                >= Configuration.SCREENLAYOUT_SIZE_LARGE;
    }http://code.google.com/p/iosched/source/browse/android/src/com/google/android/apps/iosched/util/UIUtils.java Really you are after is the current device has a large screen, not if its a tablet or not. [Edit - Just found this: https://groups.google.com/forum/?fromgroups=#!topic/android-developers/1jI9gfIm-T8 DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
double inches = Math.sqrt((metrics.widthPixels * metrics.widthPixels) + (metrics.heightPixels * metrics.heightPixels)) / metrics.densityDpi;
if (inches > TABLET_SIZE) {
   this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}This code outputs the inches as: Galaxy Nexus = 4.3 Droid = 4.08 Nexus 7 = 6.9 Samsug 10.1 = 9.2 | 
| 
 | ||
| Thanks all, yes it looks like I need to return the actual size of the device screen in Inches regardless of resolution.  I assume that last code junk is easy enough to plug into Monkey. | 
| 
 | ||
|  I assume that last code junk is easy enough to plug into Monkey.   Yeah, it should be something like this (not tested): Monkey code: Import "android.java" Extern Function GetDeviceSize:Float() = "extern.getDeviceSize" Public android.java class extern
{
	static float getDeviceSize()
	{
		DisplayMetrics metrics = new DisplayMetrics();
		getWindowManager().getDefaultDisplay().getMetrics(metrics);
		double inches = Math.sqrt((metrics.widthPixels * metrics.widthPixels) + (metrics.heightPixels * metrics.heightPixels)) / metrics.densityDpi;
		return  (float)inches;
	}
}
 | 
| 
 | ||
| Thanks rev I'll give it a bash when I am back home on Friday. | 
| 
 | ||
| did anybody ever use or try these codes above? I try to start them, but I get massive error messages: class Display {
	static int GetDpi() {
		DisplayMetrics metrics = new DisplayMetrics();
		getWindowManager().getDefaultDisplay().getMetrics(metrics);
		int dpi= metrics.densityDpi;
		return  dpi;
	}
}Strict Import mojo Import "SystemInfo.java" Extern #If TARGET="android" Function GetExtDpi:Int() = "Display.GetDpi" #Endif Public At the end I found this: http://stackoverflow.com/questions/10955287/using-getwindowmanager-inside-broadcastreceiver | 
| 
 | ||
| A lot of confusion in this thread, but I found a solution to communicate to the DisplayMetric() class. I tested this on V69 and Android 2.3 and the sample below works: save this as "testdpi.java" The sample app: some more information here: http://www.monkeycoder.co.nz/Community/posts.php?topic=4958 |