Как программно определить целевое устройство в Android? - PullRequest
0 голосов
/ 31 августа 2011

Я бы хотел программно определить (на платформе Android), является ли целевое устройство телефоном или планшетом.Есть ли способ сделать это?Я пытался использовать Density Metrics для определения разрешения и соответственно использовать ресурсы (изображения и макеты), но это не получилось.Существуют различия при запуске приложения на телефоне (Droid X) и планшете (Samsung Galaxy 10.1).

Пожалуйста, сообщите.

Ответы [ 3 ]

1 голос
/ 15 февраля 2012

Вы можете использовать этот код

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

Ссылка: http://www.androidsnippets.com/how-to-detect-tablet-device

0 голосов
/ 11 октября 2012

Основываясь на ответе Aracem, я обновил фрагмент с обычной проверкой планшета для 3.2 или выше (sw600dp):

public static boolean isTablet(Context context) {
    try {
        if (android.os.Build.VERSION.SDK_INT >= 13) { // Honeycomb 3.2
            Configuration con = context.getResources().getConfiguration();
            Field fSmallestScreenWidthDp = con.getClass().getDeclaredField("smallestScreenWidthDp");
            return fSmallestScreenWidthDp.getInt(con) >= 600;
        } else if (android.os.Build.VERSION.SDK_INT >= 11) { // Honeycomb 3.0
            Configuration con = context.getResources().getConfiguration();
            Method mIsLayoutSizeAtLeast = con.getClass().getMethod("isLayoutSizeAtLeast", int.class);
            Boolean r = (Boolean) mIsLayoutSizeAtLeast.invoke(con, 0x00000004); // Configuration.SCREENLAYOUT_SIZE_XLARGE
            return r;
        }
    } catch (Exception e) {
    }
    return false;

}
0 голосов
/ 31 августа 2011

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

...