IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Mode paysage et portrait


Sujet :

Android

  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut Mode paysage et portrait
    Bonjour à toutes et à tous,

    J'ai créé une simple application (allumer la LED pour en faire une lampe d'éclairage) . Elle fonctionne en mode portrait, mais elle plante en mode paysage.

    Que faut-il faire pour que cela fonctionne dans les deux modes ?

    Voici le source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    package com.example.Lampe_Flash;
     
    import android.app.Activity;
    import android.content.Context;
    import android.content.pm.PackageManager;
    import android.hardware.Camera;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
     
    public class MainActivity extends Activity {
    	private Button bouton;
    	private TextView info;  //variable état du flash et flash
    	private boolean isFlashOn = false;
    	private Camera camera; //on associe nos 2 variables aux id de l'interface graphique
    	private Context context;
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		bouton = (Button) findViewById(R.id.flash);
    		info = (TextView) findViewById(R.id.barreEtat); //vérifie si le tél possède un flash
    		context = this;
    		PackageManager pm = context.getPackageManager();
    		if (!pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
    			Toast.makeText(getApplicationContext(), "Votre téléphone ne possède pas de flash!", Toast.LENGTH_SHORT).show();
    			return;
    		}
    		camera = Camera.open();
    		final android.hardware.Camera.Parameters p = camera.getParameters();
     
    		bouton.setOnClickListener(new View.OnClickListener() { //clique sur le bouton
    			public void onClick(View arg0) {
    				if (isFlashOn) {
    					p.setFlashMode(android.hardware.Camera.Parameters.FLASH_MODE_OFF);
    					camera.setParameters(p);
    					isFlashOn = false;
    //on change la couleur de la zone en gris signifiant que le flash est éteint
    					info.setBackgroundColor(Color.BLUE);
    					info.setText("LED éteinte");
    				} else {
    //on change la couleur de la zone en blanc signifiant que le flash est allumé
    					info.setBackgroundColor(Color.WHITE);
    					info.setText("LED allumée");
    					p.setFlashMode(android.hardware.Camera.Parameters.FLASH_MODE_TORCH);
    					camera.setParameters(p);
    					isFlashOn = true;
    				}
    			}
    		});
    	}
     
    	@Override
    	protected void onResume() {
    		super.onResume();
    	}
     
    	@Override
    	protected void onDestroy() {
    		super.onDestroy();
    	}
    }
    et le XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/relativeLayout1"
        android:background="#000"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
     
        <Button
            android:id="@+id/flash"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:background="#000"
            android:layout_alignParentTop="true"
            android:layout_above="@+id/barreEtat" />
     
        <EditText
            android:id="@+id/barreEtat"
            android:layout_width="fill_parent"
            android:layout_height="50dp"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:background="@android:color/holo_blue_light"
            android:text="LED éteinte"
            android:singleLine="false"
            android:textAlignment="center"
            android:textStyle="bold"
            android:textSize="50sp"
            android:textIsSelectable="false"
            android:gravity="center" />
     
    </RelativeLayout>
    Merci de votre aide.

    Pierre

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Elle fonctionne en mode portrait, mais elle plante en mode paysage.
    Quel est le message d'erreur dans le logcat ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    le logcat me raconte ce qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    12-10 15:50:53.570 24362-24362/com.example.Lampe_Flash E/AndroidRuntime: FATAL EXCEPTION: main
                                                                             java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.Lampe_Flash/com.example.Lampe_Flash.MainActivity}: java.lang.RuntimeException: Fail to connect to camera service
                                                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
                                                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
                                                                                 at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3576)
                                                                                 at android.app.ActivityThread.access$800(ActivityThread.java:140)
                                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1243)
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                                 at android.os.Looper.loop(Looper.java:137)
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:4921)
                                                                                 at java.lang.reflect.Method.invokeNative(Native Method)
                                                                                 at java.lang.reflect.Method.invoke(Method.java:511)
                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
                                                                                 at dalvik.system.NativeStart.main(Native Method)
                                                                              Caused by: java.lang.RuntimeException: Fail to connect to camera service
                                                                                 at android.hardware.Camera.native_setup(Native Method)
                                                                                 at android.hardware.Camera.<init>(Camera.java:387)
                                                                                 at android.hardware.Camera.open(Camera.java:364)
                                                                                 at com.example.Lampe_Flash.MainActivity.onCreate(MainActivity.java:33)
                                                                                 at android.app.Activity.performCreate(Activity.java:5206)
                                                                                 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
                                                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
                                                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)*
                                                                                 at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3576)*
                                                                                 at android.app.ActivityThread.access$800(ActivityThread.java:140)*
                                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1243)*
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:99)*
                                                                                 at android.os.Looper.loop(Looper.java:137)*
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:4921)*
                                                                                 at java.lang.reflect.Method.invokeNative(Native Method)*
                                                                                 at java.lang.reflect.Method.invoke(Method.java:511)*
                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)*
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)*
                                                                                 at dalvik.system.NativeStart.main(Native Method)*
    NOTA, quand je maintiens le smartphone en mode portrait, j'allume et j'éteints la LED sans que l'application plante.

    Cordialement.

    Pierre

  4. #4
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Je viens de faire un autre essai : j'active mon application alors que je suis en mode paysage : cela fonctionne aussi. Mais si je passe maintenant en mode portrait, ça plante.

    En conclusion, mon appli fonctionne dans les deux modes, sauf si je change de mode en cours d'application.

    Cordialement.

    Pierre

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Tu fais un mais je ne vois nulle part de .

    De fait quand tu tourne ton application , l'activity se recréer mais ne peut plus accéder au service Camera car déjà ouvert et non fermé dans l'inclinaison précédente.

    Il faut faire ton release() au plus tôt dès que tu n'a pas plus besoin du service Camera. A défaut tu peux le faire dans le onStop();
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Citation Envoyé par grunk Voir le message
    ...

    Il faut faire ton release() au plus tôt dès que tu n'a pas plus besoin du service Camera. A défaut tu peux le faire dans le onStop();
    C'est vrai, j'avais complètement oublié cette recréation à la rotation du smartphone.

    Merci beaucoup, ça fonctionne.

    Cordialement.

    Pïerre

  7. #7
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Une petite question supplémentaire : existe-t-il une notification qui indique qu'une rotation est en cours ?

    Cordialement.

    Pierre

  8. #8
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    En faisant un release dans le onStop, l'appli ne plante plus et l'appli "repart".

    Le problème est que si ma LED était allumé, lorsque ça repart, elle se retrouve éteinte, comme au lancement de l'appli.

    Y a-t-il un moyen de mémoriser l'état antérieur pour le retrouver ?

    Ça doit être possible car dans l'exemple de la consultation d'un page WEB, la rotation ne fait pas repartir la consultation à son départ, mais là où on en était.

    Cordialement.

    Pierre

  9. #9
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Bon, j'ai résolu mon problème en utilisant les "SharedPreferences".

    Cordialement.

    Pïerre

  10. #10
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Tu peux aussi gérer toi même la rotation et ne pas recrer d'activity (ce qui n'empèche pas de release la camera).

    Pour celà dans ton manifest , tu rajoute à ta balise Application :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    android:configChanges="keyboardHidden|orientation|screenSize"
    Puis dans ton activity tu écoute les changements de configuration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
      super.onConfigurationChanged(newConfig);
      setContentView(R.layout.myLayoutpaysage); // Voir rien du tout si tu ne veux pas changer l'ui
    }
    CEci étant dit ce n'est pas considéré comme une bonne pratique : https://www.androiddesignpatterns.co...g-changes.html
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Merci "grunk" pour cette solution alternative.

    Cordialement.

    Pierre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 18/04/2015, 00h32
  2. Mode portrait et mode paysage
    Par Loufi dans le forum 4D
    Réponses: 4
    Dernier message: 28/12/2010, 13h22
  3. [CSS] Impression en mode paysage
    Par joquetino dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 25/08/2005, 12h54
  4. Mode paysage !!
    Par Shandler dans le forum MFC
    Réponses: 2
    Dernier message: 05/04/2005, 22h54
  5. imprimer fichier en mode paysage
    Par Le Veilleur dans le forum C++Builder
    Réponses: 13
    Dernier message: 10/02/2005, 22h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo