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 |