我想在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;
}
试试这个代码。你可以得到屏幕英寸
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+"");
在res文件夹中创建两个布局文件夹,如layout和layout_xlarge。在布局xlarge文件中创建一个不需要的视图。用程序获取这个不需要的视图id。访问中代码中的不需要的id尝试catchblocak如果您得到空指针异常,则它是小型设备否则它是平板电脑。还有一件事可以在布局xlarge屏幕中隐藏不需要的视图。
我想首先要回答的问题是你所说的"手机"或"平板电脑"是什么意思。我们可能在脑海中有一些区别,但实际上,您的申请不应该在意。华硕变形金刚是一款平板电脑,三星Galaxy Nexus是一款手机。什么是三星Galaxy Note?Engadget和其他人称之为"phablet"——在这种情况下,您的应用程序应该假设什么?
你对"平板电脑"的定义是指没有SIM卡的设备吗?这也是一个错误的定义,因为许多平板电脑都内置了SIM卡。你对"平板电脑"的定义是指默认为横向模式,旋转为纵向模式的设备吗?也许这是一种方法,但我怀疑这是否足够,因为未来可能会有默认为人像的平板电脑,或者更糟的是,具有方形形状因子。
在我看来,处理这个问题的最好方法是使用Android的指导方针并打开UI布局。如果你认为你对平板电脑和手机有一个明确的定义,并且绝对需要检测其中一个,你可能需要做一些事情,比如从浏览器的用户代理字符串中提取型号名称,然后将其与你维护的平板电脑名称数据库相匹配。我知道。恶心。
将此方法放在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英寸大小之后开始。