如何检测设备是Android手机还是Android平板电脑?

我有两个Android平板电脑和Android手机应用程序。 对于平板电脑应用程序,我设置了android:minSdkVersion="11" 。 但是现在像Galaxy S3这样的Android手机拥有Android 4.0.4版本,因此S3用户可以从Google Play商店下载我的平板电脑应用程序。 我想警告手机用户在安装平板电脑应用程序时下载手机应用程序。 平板电脑用户在运行手机应用程序时也会下载平板电脑应用程序

有没有简单的方法来检测设备types?

编辑:

我find了这个链接的解决scheme。

在清单文件中,您可以声明手机和平板电脑的屏幕function,然后Google Play决定手机和平板电脑的下载权限。

用这个:

 public static boolean isTablet(Context context) { return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE; } 

如果设备在大屏幕上运行,这将返回true。

其他一些有用的方法可以在这里find

你也可以试试这个
在资源文件中添加布尔参数。
在res / values / dimen.xml文件中添加这一行

 <bool name="isTab">false</bool> 

而在res / values-sw600dp / dimen.xml文件中添加以下行:

 <bool name="isTab">true</bool> 

然后在你的java文件中获得这个值:

 if(getResources().getBoolean(R.bool.isTab)) { System.out.println("tablet"); } else { System.out.println("mobile"); } 

这个代码片段将告诉设备types是否为7“英寸或更多,Mdpi或更高的分辨率。您可以根据需要更改实现。

  private static boolean isTabletDevice(Context activityContext) { boolean device_large = ((activityContext.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE); if (device_large) { DisplayMetrics metrics = new DisplayMetrics(); Activity activity = (Activity) activityContext; activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); if (metrics.densityDpi == DisplayMetrics.DENSITY_DEFAULT || metrics.densityDpi == DisplayMetrics.DENSITY_HIGH || metrics.densityDpi == DisplayMetrics.DENSITY_MEDIUM || metrics.densityDpi == DisplayMetrics.DENSITY_TV || metrics.densityDpi == DisplayMetrics.DENSITY_XHIGH) { AppInstance.getLogger().logD("DeviceHelper","IsTabletDevice-True"); return true; } } AppInstance.getLogger().logD("DeviceHelper","IsTabletDevice-False"); return false; } 

使用Google Play商店function,只能在平板电脑上下载平板电脑应用程序,在手机上下载手机应用程序。

如果用户安装了错误的应用程序,那么他们必须使用其他方法进行安装。

我们有类似的问题,我们的应用程序,应根据设备types – 选项卡/电话切换。 IOS给了我们完美的设备types,但同样的想法不适用于Android。 分辨率/ DPI方法失败,小res选项卡,高分辨率手机。 经过很多撕裂的头发,把头撞过墙壁,我们尝试了一个奇怪的想法,它的工作非常好,不会依赖于决议。 这也应该可以帮到你

在Main类中,写下这个,你应该把你的设备types设置为TAB和手机的移动设备。

 String ua=new WebView(this).getSettings().getUserAgentString(); if(ua.contains("Mobile")){ //Your code for Mobile }else{ //Your code for TAB } 

使用以下代码来识别设备types。

 private boolean isTabletDevice() { if (android.os.Build.VERSION.SDK_INT >= 11) { // honeycomb // test screen size, use reflection because isLayoutSizeAtLeast is only available since 11 Configuration con = getResources().getConfiguration(); try { Method mIsLayoutSizeAtLeast = con.getClass().getMethod("isLayoutSizeAtLeast"); Boolean r = (Boolean) mIsLayoutSizeAtLeast.invoke(con, 0x00000004); // Configuration.SCREENLAYOUT_SIZE_XLARGE return r; } catch (Exception x) { return false; } } return false; } 

我认为这应该检测是否有东西可以打个电话,其他的东西都是没有电话function的平板电脑/电视机。

据我所知,这是唯一不依赖screenize的东西。

 public static boolean isTelephone(){ //pseudocode, don't have the copy and paste here right know and can't remember every line return new Intent(ACTION_DIAL).resolveActivity() != null; }