Aller au contenu

[Résolu] Dissocier Smartphones et Tablettes


Bismuth76

Recommended Posts

Bien le bonjour,

Une petite question me taraude : comment dissocier une tablette d'un smartphone depuis le code ?

Je m'explique. Pour l'instant, tout ce que je sais faire, c'est adapter mes ressources et mon code en fonction de la taille et/ou de la densité d'écran (utilisation de fragments par exemple...). Or, on me demande de développer une application dont le comportement diffère s'il s'agit d'un smartphone ou d'une tablette. Pour exemple, sur smartphone, l'utilisateur n'a pas besoin de s'authentifier pour démarrer l'application car on considère qu'un seul utilisateur sera amené à utiliser l'application. En revanche, sur tablette, plusieurs utilisateurs pourront se connecter (donc, écran login/mdp, etc...).

Pour l'instant, mes deux options sont :

- Regarder la taille/densité de l'écran --> Le problème c'est que, à termes, bon nombre de smartphones auront une résolution importante et certaines tablettes ont des résolutions en deçà de celles des smartphones. Des tablettes risquent donc de se comporter comme des smartphones et vice et versa.

- Déployer un APK par type d'appareil, en donnant un nom ou une description explicite pour chaque version.

Qu'en pensez-vous ? Avez-vous déjà eu affaire à ce cas ? Avez-vous connaissance d'autres alternatives ?

Merci par avance pour votre aide !

Et Joyeux Noywel ! :D

Lien vers le commentaire
Partager sur d’autres sites

Hello,

Comme ça je vois 2 solutions mais j'essayerais de réfléchir à autre chose, sait-on jamais.

La première est en effet de créer autant d'APK que de supports différents. Le market offre la possibilité de le faire de manière totalement invisible pour l'utilisateur. Le problème est que tu dois maintenir plusieurs application et ça demande donc une bonne organisation pour s'en sortir.

La seconde fonctionne très bien, je l'ai utilisée il y a pas mal de temps maintenant pour une détection de langue. Ca consistait à avoir un dossier value-en et un value-fr. Dans chacun se trouvait un fichier strings.xml contenant une chaine lang ayant pour valeur 0 en anglais et contenant 1 en français. Je gérais en fonction de la valeur dans le code.

Si tu tiens à utiliser cette dernière méthode, tu dois pouvoir utiliser le qualifier "Screen size" des ressources, tu peux voir la liste des valeurs ci-dessous (small, normal, large ou xlarge) :

screens-ranges.png

Tu dois pouvoir considérer que small et normal concernent les smartphones car il y a peu ou pas de tablettes ayant une taille d'écran si faible. Les smartphones vont généralement jusqu'à 5" grand max donc ça semble être inclus dans le "normal".

Si non pour faire plus précis, tu peux utiliser ce code trouvé sur StackOverflow :

	DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
double x = Math.pow(dm.widthPixels/dm.xdpi,2);
double y = Math.pow(dm.heightPixels/dm.ydpi,2);
double screenInches = Math.sqrt(x+y);
Log.d("debug","Screen inches : " + screenInches);

Il va te permettre de connaitre la taille exacte de l'écran.

Je réfléchis à autre chose, mais je ne pense pas qu'il y ait un moyen précis pour qualifié un appareil de smartphone ou de tablette.

Lien vers le commentaire
Partager sur d’autres sites

Salut

Merci pour ta réponse !

J'ai oublié de préciser mais il s'agit d'un déploiement In-House, on ne va pas passer par le Market (il s'agit d'une appli métier). Du coup, nous n'avons pas la restriction d'usage multi-apk (enfin, sur le market, on peut le faire mais Google recommande de ne le faire que lorsque l'applicatif embarque des ressources lourdes à multiplier par le nombre de résolutions par exemple).

Sinon, la solution de détection automatique est effectivement très intéressante, notamment pour les langues etc. Mais le problème ici c'est qu'il ne s'agit pas simplement de variation d'écrans ou de langues mais carrément de comportement (d'où ma question). Ce qui me fait "peur" dans l'utilisation des densités d'écrans, c'est que ça ne correspond pas à un développement "robuste" dans le temps (on ne peut pas vraiment prévoir si dans 1 an, nous n'aurons pas des smartphones dont la densité d'écran dépasse l'entendement :D ).

Quoiqu'il en soit, je te rejoins, je pense qu'il n'y a pas vraiment moyen de dissocier une tablette d'un smartphone (un attribut dans le manifest aurait été parfait...). Je vais donc devoir feinter avec deux APK (genre MonAppliTablette.apk et MonAppliSmartphone.apk). Du coup, effectivement, la maintenance sera doublé mais tant pis.

Je te remercie pour le temps que tu as accordé à ma question ;)

Lien vers le commentaire
Partager sur d’autres sites

Justement, avec la dernière solution proposée on ne prend en compte la densité d'écran que pour calculer le taille de l'écran en pouce.

Du coup dans un an, même si les densités dépassent en effet l'entendement, la formule sera toujours valable.

Donc si on reprend ta remarque, en effet rien ne dit que dans 1 an nous aurons pas des écrans de smartphone qui font 6 ou 7" étant donné que les constructeurs ne font que ragrandir les écrans, mais j'ai quand même quelques doutes là-dessus :P

A mon avis si tu délimites ainsi :

- screenInches <= 5.5 : Smartphone

- 5.5 < screenInches : tablette

Ca devrait le faire et être vrai assez longtemps.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...