Планшет или телефон - Android - PullRequest
136 голосов
/ 29 апреля 2011

Есть ли способ проверить, использует ли пользователь планшет или телефон? У меня проблемы с функцией наклона и моим новым планшетом (Transformer)

Ответы [ 29 ]

0 голосов
/ 26 марта 2015

ниже метод вычисляет длину диагонали экрана устройства, чтобы определить, является ли устройство телефоном или планшетом. Единственная проблема, связанная с этим методом, заключается в том, какое пороговое значение определяет, является ли устройство планшетом или нет. в приведенном ниже примере я установил его на 7 дюймов и выше.

public static boolean isTablet(Activity act)
{
    Display display = act.getWindow().getWindowManager().getDefaultDisplay();
    DisplayMetrics displayMetrics = new DisplayMetrics();
    display.getMetrics(displayMetrics);

    float width = displayMetrics.widthPixels / displayMetrics.xdpi;
    float height = displayMetrics.heightPixels / displayMetrics.ydpi;

    double screenDiagonal = Math.sqrt( width * width + height * height );
    int inch = (int) (screenDiagonal + 0.5);
    Toast.makeText(act, "inch : "+ inch, Toast.LENGTH_LONG).show();
    return (inch >= 7 );
}
0 голосов
/ 08 января 2015

com.sec.feature.multiwindow.tablet в диспетчере пакетов относится только к планшету, а com.sec.feature.multiwindow.phone - к телефону.

0 голосов
/ 25 сентября 2014

Это метод, который я использую:

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

Использование:

Конфигурация. SCREENLAYOUT_SIZE_MASK

Конфигурация. SCREENLAYOUT_SIZE_LARGE

Это рекомендуемый метод!

0 голосов
/ 29 апреля 2011

Я думаю, что это самый простой способ быть честным.Будет проверен размер используемого экрана:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();
int height = display.getHeight();

Удачи!

0 голосов
/ 22 ноября 2011

Пожалуйста, проверьте ниже код.

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", int.class);
      boolean r = (Boolean) mIsLayoutSizeAtLeast.invoke(con,
      0x00000004); // Configuration.SCREENLAYOUT_SIZE_XLARGE
      return r;
    } catch (Exception x) {
      x.printStackTrace();
      return false;
    }
  }
  return false;
}
0 голосов
/ 08 октября 2017

Для меня различие между телефоном и планшетом заключается не в размере устройства и / или плотности пикселей, которые будут меняться в зависимости от технологии и вкуса, а в соотношении экрана. Если я показываю экран с текстом, мне нужно знать, нужно ли, скажем, 15 длинных строк (телефон) против 20 более коротких строк (планшет). Для моей игры я использую следующее для приблизительной оценки прямоугольника, с которым будет работать мое программное обеспечение:

    Rect surfaceRect = getHolder().getSurfaceFrame();
    screenWidth = surfaceRect.width();
    screenHeight = surfaceRect.height();
    screenWidthF = (float) screenWidth;
    screenHeightF = (float) screenHeight;
    widthheightratio = screenWidthF/screenHeightF;
    if(widthheightratio>=1.5) {
        isTablet=false;
    }else {
        isTablet=true;
    }
0 голосов
/ 22 февраля 2012

Например, есть одно важное отличие (по крайней мере, для моей программы) между телефоном и планшетом.Это ориентация устройства по умолчанию.Телефон имеет портретную ориентацию, планшет - альбомную.И соответственно метод определения устройства:

private static boolean isLandscapeDefault(Display display) {
    Log.d(TAG, "isTablet()");
    final int width = display.getWidth();
    final int height = display.getHeight();

    switch (display.getOrientation()) {
    case 0: case 2:
        if(width > height) return true;
        break;
    case 1: case 3:
        if(width < height) return true;
        break;
    }
    return false;
}

РЕДАКТИРОВАНИЕ: После обсуждений с Дэном Халмом изменилось название метода.

0 голосов
/ 18 декабря 2018

зачем использовать это?

Use this method which returns true when the device is a tablet

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

я вижу много способов выше. Класс Configuration получил правильный ответ чуть ниже:

    /**
 * Check if the Configuration's current {@link #screenLayout} is at
 * least the given size.
 *
 * @param size The desired size, either {@link #SCREENLAYOUT_SIZE_SMALL},
 * {@link #SCREENLAYOUT_SIZE_NORMAL}, {@link #SCREENLAYOUT_SIZE_LARGE}, or
 * {@link #SCREENLAYOUT_SIZE_XLARGE}.
 * @return Returns true if the current screen layout size is at least
 * the given size.
 */
public boolean isLayoutSizeAtLeast(int size) {
    int cur = screenLayout&SCREENLAYOUT_SIZE_MASK;
    if (cur == SCREENLAYOUT_SIZE_UNDEFINED) return false;
    return cur >= size;
}

просто позвоните:

 getResources().getConfiguration().
 isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_LARGE);

это нормально?

0 голосов
/ 15 августа 2013

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

Если вы запускаете гироскоп (или датчик вращения) на смартфоне, оси X и Y могут быть определены иначе, чем на планшете, в соответствии с ориентацией устройства по умолчанию (например, Samsung GS2 - портрет по умолчанию, Samsung GT -7310 - пейзаж по умолчанию, новый Google Nexus 7 - портрет по умолчанию, хотя это планшет!).

Теперь, если вы хотите использовать Gyroscope, у вас может получиться рабочее решение для смартфонов, но путаница с осями на некоторых планшетах или наоборот.

Если вы используете одно из приведенных выше решений, выберите размер экрана, а затем примените

SensorManager.remapCoordinateSystem(inputRotationMatrix, SensorManager.AXIS_X, 
    SensorManager.AXIS_Y, outputRotationMatrix);

чтобы перевернуть ось, если у нее большой или большой размер экрана, это может сработать в 90% случаев, но, например, на Nexus 7 это вызовет проблемы (поскольку у него книжная ориентация по умолчанию и большой размер экрана) ).

Самый простой способ исправить это представлен в образце RotationVectorSample, который поставляется с демонстрационными примерами API, установив sceenOrientation в nosensor в вашем манифесте:

<activity
    ...
    android:screenOrientation="nosensor">
...
</activity>
...