Как найти планшет или телефон в 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.

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

Попробуй это

  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.

Этот вопрос обсуждается в 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 } 

обращаться

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

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

Попробуйте этот код, ваше приложение работает на телефоне или планшете для работы с телефоном, легко можно вызвать метод 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; } 

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

Res / values-xlarge res / values-large 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): 

Попробуйте этот код. Вы можете получить дюймы экрана. На основе размера вы можете получить планшет или устройство 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+""); 

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

 private boolean isPhoneDevice(){ return getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY); } 

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

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

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