2012-07-02 20 views
1

运行后,可以如果您的应用程序在不同的Android版本的使用运行检查以下内容:检查应用程序的平板电脑

int sdk = Build.VERSION.SDK_INT; 
if (sdk <= Build.VERSION_CODES.ECLAIR){ 
    //do stuff 
} else { 
    //do some other stuff 
} 

是否有平板电脑使用这样的检查?目前,我有两种方法可以发现,我不喜欢:

Configuration configuration = getResources().getConfiguration(); 
if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
    try { 
     return configuration.screenWidthDp >= 1024; 
    } catch (NoSuchFieldError ex) { 
     return false; 
    } 
} else { 
    return false; 
} 

而且,如果我用不同的视角ID不同的布局文件:

return findViewById(R.id.mytabletlinearlayout) == null; 

有什么样的版本代码可用于此?还是有另一种更优雅的解决方案?

编辑

对于一些清楚起见,我需要的,如果我跑我在平板电脑的应用程序来执行一些不同的动作,因为当时我正在使用多窗格布局。

+0

一些说明:您是否希望看到_if_您的应用_可以在特定的平板电脑上运行?或者_if_它在平板电脑上运行? – NominSim

+0

如果它当前正在平板电脑上运行。如果它在平板电脑上运行,我需要调用其他方法,而不是我在智能手机上调用的方法。 – nhaarman

回答

3

与其试图检测平板电脑,考虑检测屏幕尺寸并检测设备支持的功能,因为手机和平板电脑之间的区别并没有完全明确(​​并且可能会发生变化)。

要检测功能,请使用PackageManager类,具体为hasSystemFeaturegetSystemAvailableFeatures。为了检测屏幕大小,您的第二种方法是在不同文件夹中的布局中嗅探变化是处理它的适当方式。

如果您在运行时检查可用功能,您不会被强制提前对平板电脑进行概括,例如假设他们没有后置摄像头或其他功能。

+0

+1用于“考虑检测设备支持的屏幕尺寸和检测功能”。 – NominSim

+0

我并没有真正使用功能的区别,而是确实使用了多窗格布局的屏幕大小。我在我的问题中提供的代码片段很难看,因为'screenWidthDp'字段在较旧的Android版本中不存在。 – nhaarman

+0

由于您只是根据屏幕尺寸寻找分支,因此我通常更喜欢您选择仅测试布局中与每个屏幕尺寸对应的非空视图。 – wsanville

0

要检查它是否在平板电脑上运行this answer应该足够了。请记住,你可能会问错误的问题。你的程序应该更担心你正在使用的设备的具体特征。 (例如屏幕大小,内存容量等)

相关问题