Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Autoriser application à partir écran 10"

    14 mai 2012 à 21:21:28

    Bonjour à tous,
    Je rencontre un soucis dans la création de mon application au moment où je veux mettre des "conditions d'utilisation". C'est à dire que je voudrais que mon application ne marche uniquement pour les tablettes ayant un écran de 10 pouces (et plus).
    Pour les tailles plus petites juste afficher un "désolé blabla taille trop petite de votre écran".

    J'ai tout essayé (enfin je crois :D) :
    layout-large
    layout-sw720dp
    layout-hdpi
    Tout ceci ne marchant pas j'ai voulu gfaire le test dans l'autre sens :
    layout-ldpi
    ...

    voir : http://developer.android.com/guide/pra [...] _support.html

    Rien ne marche je tombe toujours dans le main.xml du layout normal.

    Ce que l'on peut trouver dans le manifest si ça peut aider :
    android:versionCode="1"
    android:versionName="1.0"
    ainsi que
    <uses-sdk android:minSdkVersion="8" />

    Merci beaucoup de votre aide ! :D
    • Partager sur Facebook
    • Partager sur Twitter
      14 mai 2012 à 22:02:54

      Bonsoir,

      Ce que tu peux faire c'est récupérer au lancement de ton application la taille en pouces de l'écran, si ça te convient tu fais comme si de rien n'était et si ça ne te convient pas tu affiches ton message comme quoi l'écran est trop petit.
      Bien sur cela n'empêche pas les utilisateurs de téléchargés ton application même si leur écran est trop petit.
      En espérant t'avoir aidé. Bonne soirée
      • Partager sur Facebook
      • Partager sur Twitter
        15 mai 2012 à 17:48:50

        Merci de ta réponse. :)

        C'est effectivement une astuce que je n'avais pas pensé car il me semblait que des outils comme layout-small ... était fait pour.
        Si j'ai bien compris, je fait un getHitRec sur mon linearlayout global.
        Je vais tester ça. ;)

        EDIT :
        Je rencontre un soucis :(
        Pour calculer la taille je fais :
        Display metrics = getWindowManager().getDefaultDisplay();
        ecranl = metrics.getWidth(); 
        ecranL = metrics.getHeight();
        


        Pou mon écran 10" ça donne ecranl = 600 et ecranL = 1024
        ensuite je fais ceci dans le onCreate :
        if(ecranl < 550){
            setContentView(R.layout.erreur);
        }else{
            setContentView(R.layout.main);
            ... tout le reste du code jusqu'à la fin du onCreate
        }
        


        Lorsque je teste avec une tablette 10" ça passe nickel, mais lrosque je fais avec un écran plus petit ça crash :(
        • Partager sur Facebook
        • Partager sur Twitter
          15 mai 2012 à 19:48:12

          Bonsoir,

          A part qu'en récupérant la taille en pixel de la largeur et de la hauteur de l'écran cela ne te donne pas la taille en pouce de l'écran je en vois pas où est le problème ?
          Par élimination si ton problème survient que quand l'écran est trop petit ça veut surement dire que le problème vient de ton fichier xml "erreur", est tu sûr qu'il n'y ai pas d'erreur ? Même si ton compilateur ne te détectes pas une erreur de syntaxe ou autre il arrive que cela fasse crasher comme tu dis le terminal.
          • Partager sur Facebook
          • Partager sur Twitter
            15 mai 2012 à 20:19:22

            Bonsoir,
            encore merci de m'avoir répondu.

            D'après mes erreurs cela vient d'un tabHost qui se situe dans le main.xml et je ne comprend pas pourquoi dans la suite du code il va chercher ce tabHost. Ce dernier qui est utilisé dans le else de la condition. o_O
            • Partager sur Facebook
            • Partager sur Twitter
              15 mai 2012 à 20:24:29

              Comment vérifies tu si la taille d'écran te conviens ? (J'entends par là que tu pourrais me montrer ton code)
              • Partager sur Facebook
              • Partager sur Twitter
                15 mai 2012 à 20:27:07

                Bonsoir,

                Je crois que tu as très mal compris l'utilité des différents dossiers du projet Android. Effectivement, ils sont destiné aux différents tailles d'écran mais dans le cas où aucun dossier n'est prévu pour un écran, Android va automatiquement récupérer les fichiers nécessaires dans le dossier par défaut. Tu ne peux rien faire à ça, toutes les techniques alternatives sont du bidouillage et ne peuvent être que déconseiller !

                Pourquoi veux-tu faire ça ? La seule chose que tu peux faire c'est définir la version Android supporté. Si ton but est de rendre compatible ton application uniquement avec des tablettes, il suffit de supporter uniquement la version 3.x. Et encore, c'est une connerie puisque la version 4 fusionne pour regrouper les versions tablettes et smartphones.

                La force d'android est de fournir un framework assez intelligent pour supporter aussi bien les écrans tablettes que smartphone. Il suffit simplement de bien concevoir ces interfaces.
                • Partager sur Facebook
                • Partager sur Twitter
                Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
                  15 mai 2012 à 20:47:35

                  Et aussi qu'il y a des tablettes (rares certes) avec une version antérieure à la 3.

                  L'été dernier, j'ai bossé sur une Archos 101 Internet Tablet tournant sous Froyo 2.2.1...

                  Le seul moyen de savoir si on est en présence d'une tablette ou d'un téléphone est le DeviceId .

                  En effet, chaque terminal tournant sous Android a un identifiant unique appelé DeviceId. Le point positif est que ce DeviceId n'est présent que sur les téléphones : les tablettes en sont exemptes.
                  Le seul moyen d'identifier ces dernières est de se baser sur l'ANDROID_ID qui lui n'est pas unique puisque lié au compte Google de l'appareil. Deux périphériques liés au même compte Google ont donc le même ANDROID_ID.

                  Voici le code permettant de récupérer ces identifiants selon que l’on est en présence d'une tablette ou d'un téléphone :
                  public String getDeviceId() {
                      TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
                      String deviceId = telephonyManager.getDeviceId();
                      if (deviceId == null) {
                          // C'est une tablette !!!
                          deviceId = Settings.System.getString(getContentResolver(), Settings.Secure.ANDROID_ID);
                      return deviceId;
                  }
                  


                  A adapter pour faire le test tablette/téléphone donc.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 mai 2012 à 20:53:29

                    Merci à tous de vos réponses.

                    @Farm :
                    Display metrics = getWindowManager().getDefaultDisplay();
                    ecranl = metrics.getWidth(); 
                    ecranL = metrics.getHeight();
                    if(ecranl < 550){
                        setContentView(R.layout.erreur);
                    }else{
                        setContentView(R.layout.main);
                        ... tout le reste du code jusqu'à la fin du onCreate
                    }
                    


                    @AndroWiiid : Oui ça j'ai bien compris mais le problème c'est que quand je teste avec l'émulateur 2.2 (qui a un petit écran) mon layout-small n'était pas pris (le layout par défaut était lancé).
                    Malheureusement pourquoi je fais ça ? Tout simplement car j'ai mal conçu mon interface. Du coup je voudrais "n'autorisé" que les grands écrans (ce pourquoi à la base mon appli était destinée)



                    Sinon j'ai réussi en bidouillant ( ;) ) que mon erreur.xml soit accepté en reprenant le tabHost du main et en le mettant en wrap_content. Du coup celui ci ne mesure rien (puisqu'il ne conteint rien) et l'illusion est parfaite. :-°


                    EDIT :
                    @Fumble : Merci pour l'information. Ca a l'air pas mal mais je ne suis pas sûr que cela résoudra mon problème (quid des mini tablettes comme par exemple l'archos 32?). En tout cas a voir dès que possible !
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 mai 2012 à 9:22:14

                      J'ai trouvé cet élément à rajouter dans le manifest. Cela pourrait peut-être régler ton problème :

                      <supports-screens
                            android:smallScreens="[true | false]"
                            android:normalScreens="[true | false]" 
                            android:largeScreens="[true | false]"
                            android:anyDensity="[true | false]" />
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
                        16 mai 2012 à 12:49:23

                        J'ai mis ceci dans mon manifest :
                        <supports-screens
                              android:smallScreens="false"
                              android:normalScreens="true" 
                              android:largeScreens="true" />
                        


                        Et pourtant mon appli se lance sur mon AVD avec écran HVGA. :euh:
                        • Partager sur Facebook
                        • Partager sur Twitter

                        [Android] Autoriser application à partir écran 10"

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown