2016-10-20 2 views
17

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

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

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

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

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

ответ

1

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

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

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

+0

К сожалению, этот метод не применим в данном контексте, так как я должен был бы связать каждую модель с его ввести вручную. Мне нужен метод, который работает сегодня и будет работать завтра ... Я думаю, что его не существует :( – Spotlight

2

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

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

Этот link также был бы вам полезен.

Получить ширину экрана и проверить это с помощью этих точек останова.

/* Tablet (портрет и пейзаж) ----------- */

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

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

min-width : 1224px 
+0

Как отличить планшет от компьютера? У обоих есть большой экран – Spotlight

+0

Есть таблетки с большим количеством пикселей, чем ноутбуки В любом случае размер экрана не отличается от того, что отличает планшет от ноутбука. – Spotlight

1

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

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

Это не отвечает на мой вопрос: как получить тип устройства (например, телефон, планшет, телевизор, автомобиль, часы или компьютер)? – Spotlight

3

Чтобы различать между телефоном и планшетом или компьютером я могу проверить для минимального размера экрана (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 и т. д. Я не уверен, что вы можете использовать это для телевизора и т. д., но я думаю, что стоит попробовать.

+0

различие между планшетом и компьютером? У обоих есть большой экран – Spotlight

1

смотрите по этой ссылке,

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

здесь ниже я поставил код для проверки Tablet или Android TV, пожалуйста, проверьте, будет работает

для планшета

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

для ТВ

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

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

+0

Как отличить от планшета и ноутбука? Большой экран не делает какое-либо устройство планшетом – Spotlight

1

проверка планшетного устройства.

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

Как отличить планшет от ноутбука? не делает какое-либо устройство планшетом – Spotlight

Смежные вопросы