如何以编程方式知道它是平板电脑还是手机?

时间:2012-03-27 06:41:29

标签: android device tablet screen-size android-screen

我想检测一下这个给定的设备是android中的平板电脑还是手机。我已经在模拟器中尝试了这两个但没有用。两者都在这里:

第一

if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) 
{
    //code
}

第二

    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;                   
}

4 个答案:

答案 0 :(得分:7)

试试这段代码。您可以获得屏幕英寸

    String inputSystem;
    inputSystem = android.os.Build.ID;
    Log.d("hai",inputSystem);
    Display display = getWindowManager().getDefaultDisplay(); 
    int width = display.getWidth();  // deprecated
    int height = display.getHeight();  // deprecated
    Log.d("hai",width+"");
    Log.d("hai",height+"");
    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    double x = Math.pow(width/dm.xdpi,2);
    double y = Math.pow(height/dm.ydpi,2);
    double screenInches = Math.sqrt(x+y);
    Log.d("hai","Screen inches : " + screenInches+"");

答案 1 :(得分:6)

res 文件夹中创建两个布局文件夹,例如布局 layout_xlarge 。在 layout-xlarge中创建一个不需要的视图 file。以编程方式获取此不需要的视图ID。如果您获得空指针异常,则尝试捕获 blocak中的代码中的不需要的ID 然后它是小设备< / strong>否则它是平板电脑。在layout-xlarge屏幕中隐藏不需要的视图。

答案 2 :(得分:2)

我认为第一个要回答的问题是“手机”或“平板电脑”的含义。我们的思想可能有些不同,但实际上,您的应用程序应该不关心。华硕Transformer是一款平板电脑,三星Galaxy Nexus是一款手机。什么是Samsung Galaxy Note? Engadget和其他人称之为“ phablet ” - 在这种情况下,您的申请应该假设什么?

您对“平板电脑”的定义是否是没有SIM卡的设备?这也是一个错误的定义,因为有很多平板电脑都有内置的SIM卡。您是否定义“平板电脑”任何默认为横向模式且旋转为纵向模式的设备?也许这是一种方法,但我怀疑这是否足够,因为可能会有平板电脑默认为纵向,或者更糟糕的是,将来会有方形外形。

在我看来,处理此问题的最佳方法是使用Android's guidelines并启用UI布局。如果您认为平板电脑与手机有明确的定义并且绝对需要检测其中一个,那么您可能需要执行类似提取模型名称from the browser's user agent string的操作,然后将其与平板电脑名称数据库进行匹配。你保持。我知道。呸。

答案 3 :(得分:0)

将此方法放在onResume()中并可以检查。

public double tabletSize() {

     double size = 0;
        try {

            // Compute screen size

            DisplayMetrics dm = context.getResources().getDisplayMetrics();

            float screenWidth  = dm.widthPixels / dm.xdpi;

            float screenHeight = dm.heightPixels / dm.ydpi;

            size = Math.sqrt(Math.pow(screenWidth, 2) +

                                 Math.pow(screenHeight, 2));

        } catch(Throwable t) {

        }

        return size;

    }

一般在6英寸大小后开始使用平板电脑。