Devoir Surveillé Nombre de page = 6
Total = 60 points NOM et Prénom :____________________________________________________
Note finale = Total/3
Groupe :_________________________________________________________
Exercice1 (QCM) Cocher les réponses correctes: (30 points)
1) Pour manipuler une base de données locale, une e) Javascript
application mobile peut utiliser comme SGBD : f) Objective C
a) Mysql 8) Le répertoire /values-XX/
b) SQLite a) XX se sont les coordonnées de localisation
c) Oracle géographique
d) Access b) le code de la langue que l'on souhaite
2) Pour réaliser des applications mobiles Android on implanter
peut utiliser c) XX sont des chiffres
a) Eclipse avec un certain plugin d) XX sont des lettres
b) NetBeans avec un certain plugin 9) les permissions nécessaires à l'application sont
c) Android Studio définies dans le fichier :
d) Notepad est largement suffisant a) arrays.xml
e) X-Code b) strings.xml
3) Parmi Les formats d’échanges de données utilisés c) manifest.xml
entre une application android et un service web d) R.java
on trouve 10) Les repertoires xhdpi, xxhdpi, hdpi, mdpi sont
a) dll incluse dans le répertoire :
b) xml a) menu
c) json b) mipmap
d) php c) values
4) Pour écrire ou lire dans une base de données d) gradle
centralisée mysql depuis un seveur, l’application e) drawable
mobile procède comme suit : 11) ANDROID STUDIO utilise un système qu’on appelle
a) Elle peut lancer ses requêtes à partir de son Gradle pour :
code source java a) compiler et générer les applications
b) Elle utilise un service web b) gérer l’éditeur et les options de la complétion
c) Elle invoque une URL selon le mode POST ou du code
GET, et la page invoquée prendra en charge le c) jouer le rôle d’un émulateur
lancement de requêtes à l’intérieur de son 12) R.drawable.mercury :
code a) R est un objet
5) Open Handset Alliance (OHA) est : b) R est une classe
a) Une Librairie de Codes sources libres c) drawable est une constante
b) Un groupement d’entreprises, d’opérateurs d) drawable est une sous classe
mobiles, de développeurs e) mercury est un entier
c) Développe des normes ouvertes pour les f) mercury représente une image
appareils mobiles 13) R.java
6) Le répertoire /values-XX/ : a) Une classe auto-générée
a) se trouve dans le répertoire /res/ b) Décrit les ressources de l’application
b) il contient les images et les icones de c) On peut la modifier et toucher son code
l’application source
c) il assure l’internationalisation de l’application 14) Un Widget est :
d) il contient les tableaux et les chaines de a) Un ViewGroup
caractères en xml b) Un View
7) Parmi les langages suivants, lesquels sont c) Peut contenir d’autres widgets
indispensables pour créer des applications natives 15) Pour exécuter une requête Select on utilise la
en android ?: méthode
a) Php a) execsql
b) C/C++ b) rawquery
c) Java
d) Kotlin
1
16) rawquery est une méthode appartenant à la classe a) String[]
a) SqliteDatabase b) Cursor
b) Cursor c) SqliteDataBase
17) Un Layout est un : d) Object[]
a) Gabarit 24) Un fichier base de données doit être rangé dans :
b) Un Conteneur de widget(s) et de layout(s) a) Le répertoire res/raw/
c) Un conteneur de layout seulement b) /data/data/PAQUETAGE/databases/NOM_BD
d) Un ViewGroup D
18) Les identificateurs dans R.java font référence à 25) Pour le confort du programmeur dans sa tâche de
des fichiers se trouvant dans le répertoire : développement, il doit utiliser :
a) java a) Un environnement de développement
b) res b) Un ordinateur puissant côté processeur et
c) generated mémoire vive
d) libs c) Une connexion internet
19) Dans cette expression d) Il n’a pas besoin de tout cela
« @+id/IditificateurAttribut », le caractère + est 26) Qu'est-ce que DDMS dans Android?
utilisé : a) Dalvik memory server
a) Lorsque qu’on fait référence à un composant b) Device memory server
graphique pour la première fois même s’il c) Dalvik monitoring services
serait défini par la suite dans le fichier layout d) Dalvik debug monitor services
xml 27) Qu'est-ce qu'une classe anonyme dans Android?
b) Seulement lorsque le composant sera défini a) Interface class
avec ses attributs et pas dans d’autres b) Une classe qui n'a pas de nom mais qui contient
définitions d’autre widgets des fonctionnalités
c) On peut utiliser ‘+’ deux fois dans un même c) Java class
fichier layout xml pour le même widget d) Manifest file
20) Pour programmer un évènement de « click » sur 28) Est-il possible d'avoir une activité sans interface
un bouton, le seul et l’unique moyen est d’utiliser utilisateur pour effectuer une action / des actions?
un écouteur anonyme privé comme suit : Button a) Pas possible
B=(Button)findViewById(R.id.button); b) Oui c’est possible
B.setOnClickListener(new View.OnClickListener() 29) Concernant le cycle de vie d'une application
{@Override Android, cochez les affirmations qui sont vraies?
public void onClick(View v) {/*to do*/ } }); a) La durée de vie en avant plan d'une activité se
a) vrai passe entre un appel à onResume ( ) jusqu'à ce
b) faux qu'un appel correspondant à onPause ( )
21) La valeur ="fill_parent" est équivalente à : b) La durée de vie visible d'une activité qui se
a) match_parent passe entre un appel à onStart ( ) jusqu'à ce qu'un
b) wrap_content appel correspondant à onStop( )
22) android:layout_width et android:layout_height c) La durée de vie entière d'une activité qui se
sont des attributs associés passe entre le premier appel à onCreate (Bundle)
a) seulement à des objets graphiques non à travers un dernier appel unique à onDestroy ( )
conteneurs 30) Comment obtenir une réponse d'une activité sur
b) seulement à des objets graphiques conteneurs Android?
c) à des objets graphiques non conteneurs et a) startActivityToResult()
conteneurs b) startActiivtyForResult()
23) Le type de retour de la méthode rawquery est un c) Bundle()
objet de type :
Exercice 2 : (6 points)
Dessinez l’interface qui correspond au layout xml suivant :
<?xml version=”1.0” encoding=”utf-8”?> xmlns:android=”http://schemas.android.com/apk/res/an
<RelativeLayout droid”>
android:id=”@+id/widget37” <TextView android:id=”@+id/label”
android:layout_width=”fill_parent” android:layout_width=”fill_parent”
android:layout_height=”fill_parent” android:layout_height=”wrap_content”
android:text=”Type here:” />
2
<EditText android:id=”@+id/entry” android:layout_marginLeft=”10px”
android:layout_width=”fill_parent” android:text=”OK” />
android:layout_height=”wrap_content” <Button android:layout_width=”wrap_content”
android:layout_below=”@id/label” /> android:layout_height=”wrap_content”
<Button android:id=”@+id/ok” android:layout_toLeftOf=”@id/ok”
android:layout_width=”wrap_content” android:layout_alignTop=”@id/ok”
android:layout_height=”wrap_content” android:text=”Cancel” />
android:layout_below=”@id/entry” </RelativeLayout>
android:layout_alignParentRight=”true”
Exercice 3 : (6 points)
1) A quoi sert La proprieté android:padding et la propriété android:layout_margin.
2) Qu’est-ce qu’un Intent ? Quelle est la différence entre un intent implicite et un intent explicite.
Exercice 4 : (10 points)
1) On souhaite créer une application android qui permet de charger des informations à partir d’un fichier arrays.xml
arrangé dans le répertoire values, vers une table « Etudiants» dans une base de données locale nommé
PERSONNE.db. La table contient 4 champs. La première colonne est de type entier (cin) tandis que la deuxième
(nom de l’étudiant), la troisième (prénom) et la quatrième (Adresse) sont de type texte.
a) Donnez le contenu du fichier activity_main.xml contenant simplement un LinearLayout et un bouton avec une
propriété android:onClick="ArraysToDataBase".
b) Donnez le contenu du fichier mainactivity.java dans lequel vous mettez le code nécessaire pour programmer
l’évènement public void ArraysToDataBase (View view){…..}
Notez bien : Si vous jugez d’implémenter d’autres fonctions qui vous aideront dans votre travail, faites le.
2) On souhaite modifier le nom de l’étudiant BenFoulen5 en BenFaltene5, et modifier son Adresse vers Gabes.
Donnez les instructions nécessaires. (Donnez deux solutions : avec execsql et avec update)
SQLiteDatabase, SQLiteDatabase.openOrCreateDatabase(...),Cursor cursor = bdd.rawQuery(requete, ...);
void execSQL (String sql, Object[] bindArgs)
int insert(String table,null, ContentValues valeurs)
int update(String table,ContentValues valeurs, String whereClause, String[] whereArgs)
int delete(String table,String whereClause, String[] whereArgs)
Cursor, -getCount() - getColumnCount() - moveToFirst() - isAfterLast() -moveToNext() -
getColumnName(nc) :
- getInt(nc), getLong(nc), getFloat(nc), getString(nc),
Contenu du fichier arrays.xml :
<?xml version="1.0" encoding="utf- <item>77777777</item> <item>Foulen7</item>
8"?> <item>88888888</item> <item>Foulen8</item>
<resources> </integer-array > </string-array>
<integer-array name="CIN_array"> <string-array name="Noms_array"> <string-array
<item>11111111</item> <item>Foulen1 </item> name="PreNoms_array">
<item>22222222</item> <item> Foulen2/item> <item>Ben Foulen1 </item>
<item>33333333</item> <item> Foulen3</item> <item> Ben Foulen2/item>
<item>44444444</item> <item> Foulen4</item> <item> Ben Foulen3</item>
<item>55555555</item> <item> Foulen5</item> <item> Ben Foulen4</item>
<item>66666666</item> <item>Foulen6</item> <item> Ben Foulen5</item>
3
<item>Ben Foulen6</item> <item>Tunis</item> <item>Bizerte </item>
<item>Ben Foulen7</item> <item>Nabeul </item> <item>Mahdia </item>
<item>Ben Foulen8</item> <item>Kairouan </item>
</string-array> <item>Sousse </item> </string-array>
<item>Sfax </item> </resources>
<string-array name="adresse_array"> <item>Monastir </item>
Exercice 5 : (8 points)
On souhaite afficher une liste personnalisée de planètes dans une activité principale dans une application android.
Donnez le contenu du fichier activity_main.xml contenant un linearlayout et une listeView appelée malise.
Donnez le contenu du fichier item.xml contenant la description graphique de chaque item de la liste maliste
Le nom de paquetage est com.example.ds.planetelist
Complétez le code source nécessaire :
MainActivity.java
package com.example.DS.planetelist;
import android.content.res.Resources;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
public class ……………………………………….extends AppCompatActivity {
int IMAGES[];//pour stocker les id(s) des images depuis les
ressources
String Noms[];//les noms des planetes depuis les ressources
String dist[];//les distances par rapport au soleil depuis les
ressources
Planete P[];
int taille;
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(………………………………………….);
Resources res=…………………………………………….
Noms=res.getStringArray(……………………………………………..);
dist=res.getStringArray(……………………………………………..);
taille=Noms.length;
IMAGES=new int[taille];
IMAGES[….]=…………………………………..;
IMAGES[….]=…………………………………..;
IMAGES[….]=…………………………………..;
IMAGES[….]=…………………………………..;
IMAGES[4]=R.drawable.jupiter;IMAGES[5]=R.drawable.saturn;
IMAGES[6]=R.drawable.uranus;
IMAGES[7]=R.drawable.neptune;
int i;
P=new ………………………[…………………………….];
for(i=0;i<……………………;i++)
{ P[………………]=new Planete(…………,Noms[i],………………….); }
PlaneteAdapter adapter=new PlaneteAdapter(this,……..);
listView=(ListView)findViewById(………………...………………….);
listView.setAdapter(……………………………..); }}
Planete.java
package com.example.DS.planetelist;
public class Planete {
4
protected int mImageid;
protected String nomPlanete;
protected String Distance;
public Planete(int urlimage, String t, String dist)
{ ……………………………= …………………………….;
…………………………….=…………………………….;
…………………………….=…………………………….;
}}
PlaneteAdapter.java
package com.example.elayech.planetelist;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
public class PlaneteAdapter extends ArrayAdapter<……………………………..> {
public PlaneteAdapter(Context context, Planete [] planetes)
{ super(……………………………,0,………………………);
}
@Override
public View getView(int position,View recup, ViewGroup parent)
{ PlaneteView viewItem=(PlaneteView)…………………………;
if(viewItem==…………………………..)
viewItem=PlaneteView…………………………………..(parent);
//Afficher les valeurs
viewItem.display(super.getItem(……………………………..));
return viewItem;
}}
PlaneteView.java
package com.example.elayech.planetelist;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
/*1 ère étape création de la classe PlaneteView héritant de Relative Layout pour définir un layout item personnalisé
*/
/*PlaneteView est une sorte de RelativeLayout contenant deux textView et une ImageView*/
public class PlaneteView extends RelativeLayout {
TextView Description,Distance;
ImageView Image;
/*Constructeur*/
public PlaneteView(Context context, AttributeSet attrs)
{super(context, attrs);
}
/*2 ème étape Aller vers Layout et ajouter la description xml de ce nouveau RelativeLayout*/
/*3 ème étape la méthode findViews*/
private void findViews()
{…………………………………..=(TextView)findViewById(R.id.textView);
5
…………………………………..=(TextView)findViewById(R.id.textView2);
…………………………………..=(ImageView)findViewById(R.id.imageView);
}
/*4 étape Créer ou récupérer un planeteView */
public static PlaneteView create(ViewGroup parent)
{PlaneteView itemView;
LayoutInflater li;
li=LayoutInflater.from(parent.getContext());//pointer li sur la listeview
itemView=(PlaneteView)li.inflate(R.layout.item_planete,parent,false);
itemView……………………………………….();
return ……………………………………..;
}
public void display(Planete planete)
{
Description.setText(………………………………………….);
Distance.setText(………………………………….);
Image.setImageResource(………………………………………….); }
}
arrays.xml
<?xml version="1.0" <item>Neptune</item> <item>778,5 millions
encoding="utf-8"?> </string-array> km</item>
<resources> <item>1,434 milliard
<string-array <string-array km</item>
name="planets_array"> name="distances_array"> <item>2,871 milliards
<item>Mercury</item> <item>57,91 millions km</item> km</item>
<item>Venus</item> <item>108,2 millions km</item> <item>4,495 milliards
<item>Earth</item> <item>149,6 millions km</item>
<item>Mars</item> km</item> </string-array>
<item>Jupiter</item> <item>227,9 millions </resources>
<item>Saturn</item> km</item>
<item>Uranus</item>
item_planete.xml
<?xml version="1.0" encoding="utf-8"?>
<………………………………………………………………… android:layout_alignParentEnd="true" xmlns:app="http://schemas.android.com/
android:id="@+id/item_planete" apk/res-auto"
android:layout_width="wrap_content" android:layout_alignParentRight="true"
android:layout_height="wrap_content" /> xmlns:tools="http://schemas.android.com
<TextView /tools"
xmlns:android="http://schemas.android.co android:id="@+id/textView2" android:layout_width="match_parent"
m/apk/res/android" android:layout_width="152dp" android:layout_height="match_parent"
android:layout_height="45dp" tools:context=".MainActivity">
xmlns:app="http://schemas.android.com/a
pk/res-auto"> android:layout_alignParentTop="true" <LinearLayout
<ImageView android:layout_width="368dp"
android:id="@+id/imageView" android:layout_alignParentEnd="true" android:layout_height="495dp"
android:layout_width="wrap_content" android:orientation="vertical"
android:layout_height="wrap_content" android:layout_alignParentRight="true" tools:layout_editor_absoluteX="8dp"
android:layout_alignParentStart="true" /> tools:layout_editor_absoluteY="8dp">
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" </com.example.DS.planetelist.PlaneteView <ListView
> android:id="@+id/maliste"
app:srcCompat="@mipmap/ic_launcher" /> activity_main.xml
<TextView ?xml version="1.0" encoding="utf-8"?> ndroid:layout_width="match_parent"
android:id="@+id/textView" <android.support.constraint.ConstraintLay
android:layout_width="147dp" out android:layout_height="match_parent" />
android:layout_height="69dp" xmlns:android="http://schemas.android.c </LinearLayout>
om/apk/res/android" </android.support.constraint.ConstraintLa
android:layout_above="@+id/imageView" yout>