我有两款适用于Android平板电脑和Android手机的应用。对于平板电脑应用,我设置了android:minSdkVersion="11"
。但是现在像Galaxy S3这样的Android手机拥有Android 4.0.4版本,因此S3用户可以从Google Play商店下载我的平板电脑应用程序。我想警告手机用户在安装平板电脑应用程序时下载手机应用程序。反之亦然,平板电脑用户在运行手机应用程序时下载平板电脑应用程序。
有没有简单的方法来检测设备类型?
我在link找到了解决方案。
在您的清单文件中,您可以为手机和平板电脑声明屏幕功能,然后Google Play会决定手机和平板电脑的下载权限。
答案 0 :(得分:129)
使用此:
public static boolean isTablet(Context context) {
return (context.getResources().getConfiguration().screenLayout
& Configuration.SCREENLAYOUT_SIZE_MASK)
>= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
如果设备在大屏幕上运行,将返回true。
答案 1 :(得分:20)
你也可以尝试这个
在资源文件中添加布尔参数
在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");
}
答案 2 :(得分:7)
此代码段将告知设备类型是否为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;
}
答案 3 :(得分:0)
使用Google Play商店功能,只能在平板电脑和手机上的手机应用下载平板电脑应用。
如果用户然后安装了错误的应用程序,那么他们必须使用其他方法安装。
答案 4 :(得分:0)
我们的应用程序存在类似的问题,应根据设备类型切换 - 标签/电话。 IOS完美地为我们提供了设备类型,但同样的想法并没有使用Android。分辨率/ DPI方法失败,小res选项卡,高分辨率手机。在经过大量撕裂的毛发并将我们的头撞在墙上之后,我们尝试了一个奇怪的想法,并且效果非常好,不依赖于分辨率。这对你也有帮助。
在Main类中,写下这个,你应该将你的设备类型设为null,TAB和mobile for Phone。String ua=new WebView(this).getSettings().getUserAgentString();
if(ua.contains("Mobile")){
//Your code for Mobile
}else{
//Your code for TAB
}
答案 5 :(得分:0)
使用以下代码识别设备类型。
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;
}
答案 6 :(得分:0)
如果您要根据屏幕英寸来确定设备是平板电脑还是手机, 您可以使用以下
6.5英寸或更高的设备被视为平板电脑,但是最近的一些手持电话的对角线值更高。好的解决方案,您可以设置边距。
public boolean isDeviceTablet(){
DisplayMetrics metrics = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(metrics);
float yInches= metrics.heightPixels/metrics.ydpi;
float xInches= metrics.widthPixels/metrics.xdpi;
double diagonalInches = Math.sqrt(xInches*xInches + yInches*yInches);
if (diagonalInches>=6.5) {
return true;
}
return false;
}
答案 7 :(得分:-1)
我认为这应该可以检测到某些内容是否可以拨打电话,其他所有内容都是没有电话功能的平板电脑/电视。
据我所知,这是唯一不依赖屏幕化的东西。
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;
}