Подтвердить что ты не робот

Правильно определить тип устройства Android

Есть ли способ точно определить тип устройства (телефон, планшет, часы, телевизор, авто, ПК)?

Прямо сейчас я нашел способ определить, работает ли приложение на автомобиле (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_CAR), на телевизоре (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) или на часах (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_WATCH). Правильно ли это? Подключен ли телефон к автомобилю в качестве телефона или "Android Авто"?

Чтобы различать телефон, планшет или компьютер, я могу проверить минимальный размер экрана (например, 600 дп, например, планшет или ноутбук).

Теперь проблема состоит в том, чтобы различать планшет и ноутбук. У вас есть идея?

PS: Я не прошу об этом сделать отзывчивый интерфейс, это вопрос, связанный с управлением устройством для учетной записи

4b9b3361

Ответ 1

Чтобы различать телефон и планшет или компьютер, я могу проверить минимальный размер экрана (например, 600dp, например, в качестве талета или ноутбука).

Существует лучший способ сделать это, и он использует значения. Например, если у вас есть 2 типа устройств (например, телефон и планшет), создайте две папки для значений. Затем для папки значений добавьте это:

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

и в ваших значениях - большая папка:

<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

Вы можете обнаружить, используя это приложение кода, работающее на большом экране или нет.

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

Эта ссылка будет также полезна для вас.

Получить ширину экрана и проверить, что с этими точками прерывания.

/* Таблетка (портретная и пейзажная) ----------- */

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

/* Настольные компьютеры и ноутбуки ----------- */

min-width : 1224px

Ответ 3

Проверьте этот класс. https://developer.android.com/reference/android/os/Build.html

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

Вы можете узнать, есть ли его телефон, вкладка или телевизор из Build.MODEL

Ответ 4

Используйте следующие статические методы для получения имени устройства, идентификатора, высоты и ширины. Подробнее см. Ссылку . Проект включает в себя все общие функции, которые требуется базовому андроидному приложению.

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

Ответ 5

обратитесь к этой ссылке,

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

при 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;
}

Он будет работать, наслаждаться...

Ответ 6

check - это планшетное устройство.

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

Вы хотите проверить это эмулятор.

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")
}