正确检测Android设备类型

时间:2016-10-20 14:51:15

标签: android

有没有办法精确检测设备类型(手机,平板电脑,手表,电视,汽车,PC)?

现在,我找到了一种方法来检测应用是否在汽车(uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_CAR),电视(uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION)或手表(uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_WATCH)上投放。 这是对的吗?连接到汽车的手机是显示为手机还是“Android Auto”?

要区分手机,平板电脑或计算机,我可以检查最小屏幕尺寸(600dp,例如平板电脑或笔记本电脑)。

现在的问题是区分平板电脑和笔记本电脑。你有什么想法吗?

PS:我不是要求它制作响应式用户界面,这是一个与帐户设备管理相关的问题

6 个答案:

答案 0 :(得分:7)

您可以使用在大屏幕上运行的代码应用程序进行检测。

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

link对您也有帮助。

获取屏幕宽度并使用此断点检查。

/ *平板电脑(纵向和横向)----------- * /

 min-device-width : 768px
 max-device-width : 1024px

/ *台式机和笔记本电脑----------- * /

min-width : 1224px

答案 1 :(得分:5)

  

为了区分手机和平板电脑或计算机,我可以检查最小屏幕尺寸(例如600dp就可以作为服务员或笔记本电脑)。

有一种更好的方法可以做到这一点并使用价值观。例如,如果您有两种类型的设备(例如手机和平板电脑),也可以为值创建两个文件夹。然后为values文件夹添加:

<resources>
    <bool name="isLarge">false</bool>
</resources>

并在您的values-large文件夹中:

<resources>
    <bool name="isLarge">true</bool>
</resources>

然后在你的活动中:

boolean isLarge = getResources().getBoolean(R.bool.isLarge);
if (isLarge) {
    // do something
} else {
    // do something else
}

使用它,你可以为手机,sw-600dp,sw-720dp等做同样的事情。我不确定你是否可以将它用于电视等,但我认为值得尝试。

答案 2 :(得分:2)

请参阅此链接,

http://developer.android.com/training/multiscreen/screensizes.html#TaskUseSWQuali

下面我把检查平板电脑或Android电视的代码,请检查,它将工作

  平板电脑

private boolean checkIsTablet() {
   boolean isTablet;
   Display display = ((Activity)   this.mContext).getWindowManager().getDefaultDisplay();
   DisplayMetrics metrics = new DisplayMetrics();
   display.getMetrics(metrics);

  float widthInches = metrics.widthPixels / metrics.xdpi;
  float heightInches = metrics.heightPixels / metrics.ydpi;
  double diagonalInches = Math.sqrt(Math.pow(widthInches, 2) + Math.pow(heightInches, 2));
  if (diagonalInches >= 7.0) {
    isTablet = true;
  }

return isTablet;
}

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

for TV

@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
private boolean checkIsTelevision() {
  boolean isAndroidTV;
  int uiMode = mContext.getResources().getConfiguration().uiMode;
  if ((uiMode & Configuration.UI_MODE_TYPE_MASK) == Configuration.UI_MODE_TYPE_TELEVISION) {
    isAndroidTV = true;
}

它会起作用,享受......

答案 3 :(得分:2)

检查物理屏幕尺寸是否很大(=平板电脑或类似笔记本电脑的设备):

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

检查应用是否在Android SDK模拟器中运行:

public static boolean isEmulator() {
return Build.FINGERPRINT.startsWith("generic")
        || Build.FINGERPRINT.startsWith("unknown")
        || Build.MODEL.contains("google_sdk")
        || Build.MODEL.contains("Emulator")
        || Build.MODEL.contains("Android SDK built for x86")
        || Build.MANUFACTURER.contains("Genymotion")
        || (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic"))
        || "google_sdk".equals(Build.PRODUCT);

}

检查设备是否为Android TV:

    public static final String TAG = "DeviceTypeRuntimeCheck";

    UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE);
    if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) {
        Log.d(TAG, "Running on a TV Device")
    } else {
        Log.d(TAG, "Running on a non-TV Device")
}

答案 4 :(得分:1)

检查此课程。 https://developer.android.com/reference/android/os/Build.html

String manufacturer = Build.MANUFACTURER
String model = Build.MODEL

您可以通过Build.MODEL

了解其手机,标签或电视

答案 5 :(得分:1)

使用以下静态方法获取设备名称,ID,高度和宽度。有关详细信息,请访问此link。 Project包括基本android应用程序所需的所有常用功能。

     public static String getDeviceName() {
        String manufacturer = Build.MANUFACTURER;
        String model = Build.MODEL;
        if (model.startsWith(manufacturer)) {
            return capitalize(model);
        } else {
            return capitalize(manufacturer) + " " + model;
        }
    }

    public static String getDeviceID(Context context) {
        TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        return telephonyManager.getDeviceId();
    }

    public static int getDeviceHeight(Context mContext) {
        DisplayMetrics displaymetrics = new DisplayMetrics();
        ((Activity) mContext).getWindowManager().getDefaultDisplay()
                .getMetrics(displaymetrics);
        return displaymetrics.heightPixels;
    }

    public static int getDeviceWidth(Context mContext) {
        DisplayMetrics displaymetrics = new DisplayMetrics();
        ((Activity) mContext).getWindowManager().getDefaultDisplay()
                .getMetrics(displaymetrics);
        return displaymetrics.widthPixels;
    }