57 votes

Comment détecter l'appareil est un téléphone Android ou tablette Android?

J'ai deux applications pour les tablettes android et les téléphones android. Pour une application pour tablette, j'ai mis android:minSdkVersion="11". Mais de nos jours les téléphones android comme le Galaxy S3 a android versiyon 4.0.4 donc S3 les utilisateurs peuvent télécharger sur ma tablette application à partir de Google Play Store. Je tiens à avertir les utilisateurs de téléphone pour télécharger l'application téléphone lors de l'installation, une application pour tablette. vice versa pour les utilisateurs de tablette télécharger une application pour tablette, lors de l'exécution de l'application téléphone.

Est-il un moyen facile de détecter le type d'appareil?

Edit:

J'ai trouvé la solution sur ce lien: http://developer.android.com/guide/practices/screens-distribution.html

Dans votre fichier de manifeste vous pouvez déclarer la fonction d'écrans de téléphones portables et tablettes Google Play décide de téléchargement des autorisations pour téléphone et tablette.

133voto

Alex Lockwood Points 31578

Utilisez ceci:

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

qui renvoie true si l'appareil fonctionne sur un grand écran.

Certaines autres méthodes utiles peuvent être trouvés ici.

7voto

Pawan M Points 4396

Cet extrait de code permettra de savoir si l'appareil est de type 7" Pouces ou plus et Mdpi ou de résolution supérieure. Vous pouvez changer la mise en œuvre selon votre besoin.

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

1voto

Asok Points 4986

Je pense que c'est la meilleure pratique consiste à ajouter de plus à votre fichier de manifeste, la restriction de votre application pour tablette, même à partir de l'affichage sur les appareils avec un écran plus petit.

Découvrez cette réponse d'une question similaire.

Sinon @Alex Lockwood a votre réponse.

0voto

user3703142 Points 64

Nous avons eu le même problème avec notre application qui devrait passer en fonction sur le type de périphérique - Onglet/Téléphone. IOS nous a donné le type de périphérique à merveille, mais la même idée n'était pas de travail avec Android. la résolution DPI méthode a échoué avec de petites res onglets, haute résolution téléphones. après beaucoup de déchiré poils et taper la tête sur le mur, nous avons essayé une idée bizarre et il ont très bien travaillé qui ne dépendent pas de la résolution. cela devrait vous aider trop.

dans la classe Principale, écrire, et vous devriez obtenir votre type de périphérique comme nulle pour l'ONGLET et mobile pour le Téléphone.

String ua=new WebView(this).getSettings().getUserAgentString();


if(ua.contains("Mobile")){
   //Your code for Mobile
}else{
   //Your code for TAB            
}

0voto

Vaishali Points 359

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");
                            Boolean r = (Boolean) mIsLayoutSizeAtLeast.invoke(con, 0x00000004); // Configuration.SCREENLAYOUT_SIZE_XLARGE
                            return r;
                    } catch (Exception x) {
                            return false;
                    }
            }
            return false;
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X