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

Как найти планшет или телефон в Android, программно?

Мое дело в том, что логика одинакова для телефона и планшета. Но в макете есть небольшая разница. И я попробовал со следующим кодом

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

Samsung Tab 10 "имеет разрешение 1280 * 800 и S3 имеет разрешение 1270 * 720. И этот код возвращает размер как XLarge как для Tab, так и для телефона, поскольку его критерии проверки → 960 * 720.

Я тестировал вставку соответствующего пользовательского интерфейса в папку макета в Res как Layout, Layout-Large и Layout-xLarge. Но это никак не повлияло. при проверке он взял пользовательский интерфейс из папки "Макет".

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

Есть ли другой способ его найти?

4b9b3361

Ответ 1

Попробуйте это

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

Он вернет true, если вы используете планшет. Он был проверен на Samsung Galaxy Tab 7 "и Samsung Galaxy S3.

Ответ 2

Этот вопрос обсуждается в Android Training:

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

Если вы читаете всю тему, они объясняют, как установить логическое значение в файле определенных значений (как res/values-sw600dp/):

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

Поскольку квалификатор sw600dp действителен только для платформ выше android 3.2. Если вы хотите убедиться, что этот метод работает на всех платформах (до 3.2), создайте тот же файл в папке res/values-xlarge:

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

Затем в "стандартном" файле значений (как res/values/) вы устанавливаете значение boolean в false:

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

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

boolean tabletSize = getResources().getBoolean(R.bool.isTablet);

Это не моя логика, кредит идет ol_v_er для этого простого и простого подхода. Я просто скопировал его.

Вы можете проверить оригинальный ответ здесь

Дополнительная информация

Теперь вы указываете, работает ли ваше приложение на телефоне или планшете.

Я создал два пакета для обработки пользовательского интерфейса и его функциональность,

com.phone
com.tablet

И вы перенаправляете управление на необходимый пакет

boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
if (tabletSize) {
    // do something
    //Start activity for tablet
} else {
    // do something else
    //Start activity for phone     
}

Обратитесь

Примечание. Я думаю, что для приложения размером 10 дюймов и 7 дюймов требуется использовать ресурсы от res/values-sw600dp/. Но, если быть более конкретным, я думаю, что для 10-дюймового планшета для планшетов мы можем использовать res/values-sw720dp/

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

Ответ 3

Например, вы можете установить некоторую папку res-values:

RES/значения-XLarge RES/значение-большое res/values-sw600dp

и т.д.. Затем вы можете объявить логическое значение для каждого из них:

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

или

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

вы можете получить значение

   boolean xlargeValue = getResources().getBoolean(R.bool.isXlarge);
   boolean largevalue = getResources().getBoolean(R.bool.isLarge);
   boolean tabletValue = getResources().getBoolean(R.bool.sw620dp):

Ответ 4

Попробуйте этот код, ваше приложение работает на телефоне или планшете устройства, чтобы легко вызвать метод oncreate() внутри

isTabletDevice (активность)

private static boolean isTabletDevice(Context activityContext) {

    boolean device_large = ((activityContext.getResources().getConfiguration().screenLayout &
          Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE)
    DisplayMetrics metrics = new DisplayMetrics();
    Activity activity = (Activity) activityContext;
    activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
    if (device_large) {
        //Tablet
        if (metrics.densityDpi == DisplayMetrics.DENSITY_DEFAULT){              
            return true;
        }else if(metrics.densityDpi == DisplayMetrics.DENSITY_MEDIUM){
            return true;    
        }else if(metrics.densityDpi == DisplayMetrics.DENSITY_TV){
            return true;    
        }else if(metrics.densityDpi == DisplayMetrics.DENSITY_HIGH){
            return true;    
        }else if(metrics.densityDpi == DisplayMetrics.DENSITY_280){
            return true;    
        }else if(metrics.densityDpi == DisplayMetrics.DENSITY_XHIGH) {
            return true;
        }else if(metrics.densityDpi == DisplayMetrics.DENSITY_400) {
            return true;
        }else if(metrics.densityDpi == DisplayMetrics.DENSITY_XXHIGH) {
            return true;
        }else if(metrics.densityDpi == DisplayMetrics.DENSITY_560) {
            return true;
        }else if(metrics.densityDpi == DisplayMetrics.DENSITY_XXXHIGH) {
            return true;
        }            
    }else{
        //Mobile
         } 
    return false;
}

Ответ 5

Попробуйте этот код. Вы можете получить дюймы экрана. На основе размера вы можете получить планшет или устройство Android.

 String inputSystem;
    inputSystem = android.os.Build.ID;
    Log.d("hai",inputSystem);
    Display display = getWindowManager().getDefaultDisplay(); 
    int width = display.getWidth();  // deprecated
    int height = display.getHeight();  // deprecated
    Log.d("hai",width+"");
    Log.d("hai",height+"");
    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    double x = Math.pow(width/dm.xdpi,2);
    double y = Math.pow(height/dm.ydpi,2);
    double screenInches = Math.sqrt(x+y);
    Log.d("hai","Screen inches : " + screenInches+"");

Ответ 6

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

введите описание изображения здесь

Смотрите мой более полный ответ здесь.

Ответ 7

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

Котлин

fun isTablet(): Boolean {
    return App.instance.resources.configuration.smallestScreenWidthDp >= 600
}

Джава

public static Boolean isTablet(){
    return App.instance.resources.configuration.smallestScreenWidthDp >= 600
}

App.instance является экземпляром приложения.

Ответ 8

Это отлично работает в моем приложении:

private boolean isPhoneDevice(){

    return getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY);

}

Ответ 9

public boolean isTablet() { 
try { 
    // Compute screen size 
 Context context = this;
    DisplayMetrics dm = 
 context.getResources().getDisplayMetrics(); 
    float screenWidth  = dm.widthPixels / dm.xdpi; 
    float screenHeight = dm.heightPixels / dm.ydpi; 
    double size = Math.sqrt(Math.pow(screenWidth, 2) + 
                            Math.pow(screenHeight, 2)); 
    // Tablet devices have a screen size greater than 6 
      inches 
    return size >= 6; 
  } catch(Throwable t) { 
    Log.e("Failed to compute screen size", t.toString()); 
    return false; 
  } 

}