Правильно определить тип устройства 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: Я не прошу об этом сделать отзывчивый интерфейс, это вопрос, связанный с управлением устройством для учетной записи
Ответы
Ответ 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")
}