S8 PROGRAMMATION MOBILE
Miloud LAHMAIM
RSSP2
2023-2024
Intent : lancement d’une activité
Un intent est un objet qui est utilisé pour démarrer une nouvelle activité dans votre
application, pour lancer une activité dans une autre application, ou pour lancer un service qui
effectue une tâche en arrière-plan.
Pour lancer une autre activité :
val intent = Intent(this, AutreActivite::class.java)
startActivity(intent)
Les intents peuvent également être utilisés pour passer des données entre des activités :
val intent = Intent(this, AutreActivite::class.java)
intent.putExtra("nomVar", valeurVar)
startActivity(intent)
Pour récupérer cette valeur dans l’autre activité :
val message = intent.getTYPEExtra("nomVar")
finish() fait terminer l’activité courante. L’utilisateur ne pourra pas faire back dessus,
car elle disparaît de la pile.
2
Intent : attente de résultats
Les intents peuvent également être utilisés pour lancer une activité et attendre un résultat:
val intent = Intent(this, AutreActivite::class.java)
startActivityForResult(intent, RESULT_CODE)
Dans l'activité de destination, renvoyez le résultat en utilisant setResult() et en incluant le
résultat dans un objet Intent :
val resultat = "Données renvoyées depuis l'activité de destination."
val intent = Intent()
intent.putExtra("resultat", resultat)
setResult(Activity.RESULT_OK, intent)
finish()
Dans l'activité appelante, implémentez la méthode onActivityResult() pour recevoir le
résultat de l'activité de destination :
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) {
val resultat = data?.getStringExtra("resultat")
// Faire quelque chose avec le résultat renvoyé
}
} 3
Intent : Partager
Pour partager du texte on peut utiliser le code suivant :
val message = "Hello, voici le contenu que je veux partager!"
val shareIntent = Intent(Intent.ACTION_SEND)
shareIntent.type ="text/plain"
shareIntent.putExtra(Intent.EXTRA_TEXT, message)
startActivity(Intent.createChooser(shareIntent, "Partager via"))
Dans cet exemple, nous créons une intention pour partager le texte message en utilisant l'action
ACTION_SEND.
Nous spécifions également le type de contenu en tant que text/plain, et nous ajoutons le contenu à
partager en tant que paramètre supplémentaire de l'intention en utilisant la constante
EXTRA_TEXT.
Enfin, nous utilisons la méthode createChooser() pour lancer l'application de partage système avec
une boîte de dialogue de sélection qui permet à l'utilisateur de choisir l'application avec laquelle il
souhaite partager le contenu.
Notez que le contenu partagé peut être de différents types, tels que du texte, des images ou des
fichiers. Pour partager du contenu autre que du texte, vous devez spécifier le type de contenu
approprié et transmettre le contenu en tant que données (data) ou fichier (file) via l'intention. 4
Intent : Ouvrir un lien web
Pour ouvrir un lien vers un site web on peut utiliser le code suivant :
val uri= Uri.parse("http://www.ensa.ac.ma")
val intent=Intent(Intent.ACTION_VIEW,uri)
startActivity(intent)
Dans ce code, nous créons une Uri en utilisant la méthode parse() avec l'URL que nous
voulons ouvrir dans un navigateur.
Nous utilisons ensuite cette Uri pour créer une intention avec l'action ACTION_VIEW, qui
spécifie que nous voulons afficher quelque chose, dans ce cas, une page web.
Enfin, nous lançons cette intention avec la méthode startActivity() pour ouvrir le navigateur
et afficher la page web correspondante.
L'utilisation de l'intention ACTION_VIEW avec une Uri est très courante en Kotlin Android
pour ouvrir différents types de contenu, tels que des pages web, des fichiers, des images, des
vidéos, etc. En utilisant cette intention, l'application Android lance l'application appropriée
pour afficher le contenu, selon les préférences de l'utilisateur.
5
Intent : Composer/Passer un appel
Pour composer un appel téléphonique on peut utiliser le code suivant :
val uri= Uri.parse("tel:0656565656")
val intent=Intent(Intent.ACTION_DIAL,uri)
startActivity(intent)
Ce code crée une intention pour lancer l'application de numérotation du téléphone avec le
numéro de téléphone pré-rempli spécifié, puis il démarre cette intention avec la méthode
startActivity().
Notez que l'utilisation de l'intention ACTION_DIAL ne nécessite pas la permission
CALL_PHONE dans le fichier AndroidManifest.xml, car elle ne passe pas immédiatement
l'appel, mais ouvre l'application de numérotation avec le numéro de téléphone pré-rempli.
Cependant, l'utilisateur devra appuyer sur le bouton d'appel pour lancer l'appel effectif.
6
Intent : Ouvrir un emplacement MAPS
Pour ouvrir un emplacement sur la carte MAPS on peut utiliser le code suivant :
val latitude = 31.645955
val longitude = -8.0200795
val label = "ENSA de Marrakech"
val uri = Uri.parse("geo:$latitude,$longitude?q=$label")
val intent = Intent(Intent.ACTION_VIEW, uri)
startActivity(intent)
Dans cet exemple, nous créons une Uri à partir des coordonnées de latitude et de longitude
du lieu que nous voulons afficher, ainsi que d'une étiquette pour le lieu.
Nous utilisons ensuite cette Uri pour créer une intention avec l'action ACTION_VIEW qui
spécifie l'ouverture de l'application de cartographie.
Enfin, nous lançons cette intention avec la méthode startActivity().L'URI que nous avons
créé est de la forme geo:latitude,longitude?q=label, où latitude et longitude sont les
coordonnées du lieu et label est l'étiquette que nous avons spécifiée pour le lieu.
Vous pouvez personnaliser l'URI en ajoutant des paramètres supplémentaires pour
spécifier l'échelle, le type de carte et d'autres options.
7
Média (audio + vidéo)
Les média sont souvent placés dans le dossier raw
Pour lire un fichier audio :
MediaPlayer.create(this, R.raw.NomDuFichierAudio).start()
Pour lire un fichier vidéo :
Ajouter un view de type VideoView
Récupérer cette view et utiliser le code suivant pour une vidéo locale :
videoView.setVideoPath("android.resource://" + packageName + "/" + R.raw.video)
Récupérer cette view et utiliser le code suivant pour une vidéo distante :
val videoUri = Uri.parse("https://example.com/video.mp4")
videoView.setVideoURI(videoUri)
8
Actions sur les vues
Les événements de vue sont des actions déclenchées par l'utilisateur, telles que :
Clic (2 méthodes) :
méthode1 : maFonction dans la classe de l’activité & l’attribut onClick dans le vue
fun maFonction(view: View) {} android:onClick="maFonction"
méthode2 : En utilisant un lisetner pour le vue dans la classe de l’activité :
view.setOnClickListener(){
// Code à exécuter lors du clic sur le bouton
}
Long clic : remplacer setOnClickListener par setOnLongClickListener
Changement : Lorsqu'une vue change d'état, par exemple lorsqu'une case à cocher est cochée :
checkBox.setOnCheckedChangeListener{ buttonView, isChecked ->
// Code à exécuter lorsque l'état de la case à cocher change
}
Survoler : setOnHoverListner()
……
9
Messages de dialogue
Quelques méthodes pour afficher un message :
Toast :
Toast.makeText(applicationContext, "Le message!", Toast.LENGTH_SHORT).show()
AlertDialog : on peut ajouter différents buttons (Positive, Negative et Neutral)
val builder = AlertDialog.Builder(this)
builder.setTitle("Title")
builder.setMessage("Message")
builder.setPositiveButton("OK") { dialog, which ->
// Do something when OK button is clicked
}.show()
SnackBar :
Snackbar.make(view, "Hello, World!", Snackbar.LENGTH_LONG).show()
TextView : avec color et visibility ou isVisible
10
Vibration
Voici les étapes à suivre pour ajouter une vibration à votre application Android en Kotlin :
Ajouter la permission VIBRATE dans le fichier AndroidManifest.xml :
<uses-permission android:name="android.permission.VIBRATE"/>
Récupérer une instance de la classe Vibrator :
val vibreur = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
//vérifier l'existence du vibreur
if (vibreur.hasVibrator()) {
// Effectuer une vibration d'une seconde
vibreur.vibrate(1000)
}
11
Connectivité internet
fun connectedToInternet(): Boolean {
var lastResult = false
for (i in 1..4) {
val process = Runtime.getRuntime().exec("ping -c 1 google.com")
val input = BufferedReader(InputStreamReader(process.inputStream))
val output = StringBuffer()
var line: String? = null
while ({ line = input.readLine(); line }() != null) { output.append(line) }
val exitCode = process.waitFor()
if (exitCode == 0) lastResult = true
}
return lastResult }
Cette fonction utilise la classe InetAddress pour exécuter la commande ping et récupérer la
sortie. Elle exécute 4 requêtes ping vers Google en utilisant une boucle for et stocke le résultat
de la dernière requête dans une variable lastResult. La valeur de retour de la fonction est le
résultat de la dernière requête, qui est de type booléen (true si la dernière requête a réussi,
false sinon).
Notez que cette fonction nécessite des autorisations Internet dans votre manifeste Android
pour fonctionner correctement.
12