Activité pour débutants


Introduction à cette section :

Cette section commence par expliquer l'activité (activité), l'un des quatre composants majeurs d'Android. Tout d'abord, jetons un coup d'œil à l'introduction officielle de l'activité : PS : Document du site officiel : L'activité

est introduit comme suit : À propos du sens :

L'activité est une application Composant qui fournit une zone sur l'écran qui permet aux utilisateurs d'y effectuer certaines opérations interactives. Comme passer un appel téléphonique, prendre une photo, envoyer un e-mail ou afficher une carte ! L'activité peut être comprise comme une fenêtre qui dessine l'interface utilisateur. Et cette fenêtre peut remplir tout l’écran, ou elle peut être plus petite que l’écran ou flotter au-dessus des autres fenêtres !

À partir du paragraphe ci-dessus, nous pouvons obtenir les informations suivantes :

1. L'activité est utilisée pour afficher l'interface utilisateur, et l'utilisateur interagit via des opérations liées à l'activité 2. Une application permet plusieurs activités

D'accord, c'est tout pour l'introduction générale. Si vous souhaitez en savoir plus, vous pouvez continuer à lire l'API. et commencez cette section ~


  1. Le concept d'Activité et le diagramme de cycle de vie de l'Activité1.jpg

Notes :

1. La prémisse selon laquelle onPause() et onStop() sont appelés est  : Une nouvelle activité a été ouverte ! Le premier est lorsque l’ancienne activité est toujours visible ; le second est lorsque l’ancienne activité n’est plus visible !
2. De plus, test personnel : AlertDialog et PopWindow ne déclencheront pas les deux méthodes de rappel ci-dessus ~


2 La différence entre Activity/ActionBarActivity/AppCompatActivity :

Avant de commencer à expliquer comment créer une activité, parlons de la différence entre ces trois : Inutile de préciser qu'Activity. Les deux derniers sont proposés pour compatibilité avec les versions inférieures. Ils sont tous sous le package v7. ActionBarActivity a été abandonné comme son nom l'indique, ActionBar~, et après la version 5.0, il a été abandonné par Google. Barre d'outils... Et lorsque nous créons une activité dans Android Studio, l'héritage par défaut sera : AppCompatActivity ! Bien sûr, vous pouvez aussi simplement écrire Activity, mais AppCompatActivity nous apporte quelque chose de nouveau ! Choisissez l'un des deux, Juste ce que vous aimez~


3. Processus de création d'activité

2.png

PS :

D'accord, comme mentionné ci-dessus, vous pouvez hériter de Activity et AppCompatActivity, mais cette dernière n'apporte que quelques nouveautés ! De plus, rappelez-vous que tant que vous définissez les quatre composants majeurs d'Android, que vous les utilisiez ou non, vous devez les comparer dans AndroidManifest.xml. Ce composant doit être déclaré, sinon le programme se fermera directement pendant l'exécution et signalera ClassNotFindException...


4. La différence entre un paramètre et deux paramètres de onCreate() :

Je crois que les amis qui utilisent as le découvriront en réécrivant la méthode onCreate() d'Act. , cette chose a Deux paramètres :

3.png

Mais normalement il n'y a qu'un seul paramètre :

4.png

Eh bien, c'est ça 5.0 donne Pour utiliser la nouvelle méthode que nous proposons, vous devez d'abord définir un attribut pour notre Activité dans le fichier de configuration :

android:persistableMode="persistAcrossReboots"

Ensuite notre activité a la capacité de persister. Généralement, nous l'utiliserons avec les deux autres méthodes :

public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)
public void onRestoreInstanceState( Bundle saveInstanceState, PersistableBundle état persistant)

Je pense que certains amis connaissent les noms de ces deux méthodes. La première méthode sera appelée dans les situations suivantes :

  1. Cliquez sur le bouton d'accueil pour revenir à la page d'accueil ou appuyez et maintenez pour sélectionner Exécuter d'autres programmes
  2. Appuyez sur le bouton d'alimentation pour éteindre l'écran
  3. Démarrer une nouvelle activité
  4. Lors du basculement entre les écrans horizontaux et verticaux, il sera certainement être exécuté, car l'acte sera d'abord détruit lors du basculement entre les écrans horizontaux et verticaux, puis recréé. Principe important : Lorsque le système détruit votre activité « sans votre autorisation », onSaveInstanceState sera appelé par le système. C'est la responsabilité du système, car il doit vous offrir la possibilité de sauvegarder vos données (que vous pouvez ou non sauvegarder).

Cette dernière méthode, comme onCreate, peut récupérer les données enregistrées par la première : Il est généralement exécuté entre onStart() et onResume() ! La raison pour laquelle il existe deux manières d'obtenir et de sauvegarder des données est d'éviter de sauter un acte sans fermer. Alors n'utilisez pas la méthode onCreate() et vous souhaitez supprimer les données enregistrées ~

Retour à : Retour à cette activité a la capacité de persister, et le PersistableBundle ajouté Le paramètre rend ces méthodes Il a la capacité de récupération de données permettant de arrêter et redémarrer le système ! ! Et ça n'affecte pas nos autres opérations de sérialisation, merde, Je ne sais pas encore comment il est implémenté spécifiquement, peut-être que je l'ai enregistré dans un autre fichier ~ ! Si je connais le principe plus tard, je vous le ferai savoir ! De plus, la version de l'API nécessite >=21, ce qui signifie qu'elle doit être la version 5.0 ou supérieure pour être valide~


4 Plusieurs façons de démarrer une activité

<🎜. >Sous Android, vous pouvez démarrer une nouvelle activité des deux manières suivantes. Faites attention à la manière dont elle est démarrée ici, et non. Mode démarrage ! ! Divisé en démarrage explicite et démarrage implicite !

1. Démarrage explicite : Commencez par le nom du package, écrit comme suit :

①Le plus courant :

startActivity(new Intent (actuel Act.this, Act.class à démarrer));
② ComponentName via Intent :
ComponentName cn = new ComponentName("Nom de classe complet de l'acte actuel", "Nom de classe complet de l'acte de départ");
Intent intent = new Intent();
intent . setComponent(cn) ;
startActivity(intent) ;
Spécifiez le nom du package lors de l'initialisation de l'intention :
Intent intent = new Intent( " android.intent.action.MAIN");
intent.setClassName("Le nom de classe complet de l'acte actuel", "Le nom de classe complet de l'acte de départ");
startActivity(intent) ;

2. Démarrage implicite : implémenté via l'action, la catégorie ou les données du filtre d'intention. Ceci est réalisé grâce au intent-filter** d'Intent. Ce chapitre sur Intent l'expliquera en détail ! C'est tout ce que vous devez savoir ici !

5.png

3. Il existe également une autre façon de démarrer l'apk directement via le nom du package :

Intent intent = getPackageManager() .getLaunchIntentForPackage
("Nom de classe complet de la première activité lancée par apk") ;
if(intent != null) startActivity(intent) ;

5. Problèmes de commutation d'écran horizontal et vertical et de sauvegarde de l'état

Comme mentionné précédemment, lorsque l'application bascule entre les écrans horizontaux et verticaux, l'activité en cours sera détruite puis réinitialisée. -créé. Vous pouvez le faire vous-même cycle de vie. Ajoutez une instruction à imprimer Connectez-vous à chaque méthode pour porter des jugements, ou définissez un bouton et un TextView pour modifier le TextView après avoir cliqué sur le bouton. Texte, puis basculez entre les écrans horizontaux et verticaux, vous constaterez comme par magie que le texte TextView revient à son contenu précédent ! Lors du basculement entre les écrans horizontaux et verticaux, l'Act passe par le cycle de vie suivant :
onPause-> onStop-> onDestory-> onCreate->onStart->onResume
Concernant les problèmes possibles lors du basculement entre les écrans horizontaux et verticaux Allez aux questions suivantes :


1 Parlons d'abord de la façon de désactiver le basculement automatique entre les écrans horizontaux et verticaux . . C'est très simple. Ajoutez un attribut à Act dans AndroidManifest.xml :android:screenOrientation, Il existe les valeurs facultatives suivantes :

  • non spécifié : La valeur par défaut est que le système détermine la direction d'affichage. La stratégie de détermination est liée à l'appareil, donc différents appareils l'auront. direction d'affichage différente.
  • paysage : affichage horizontal de l'écran (la largeur est plus longue que la hauteur)
  • portrait : affichage vertical de l'écran (la hauteur est plus longue que la largeur)
  • utilisateur : La direction préférée actuelle de l'utilisateur
  • derrière : Identique à la direction de l'activité en dessous de cette activité (dans la pile d'activité)
  • capteur : Il y a un capteur physique pour décider. Si l'utilisateur fait pivoter l'appareil, l'écran bascule entre paysage et portrait.
  • nosensor : ignore le capteur physique afin qu'il ne change pas lorsque l'utilisateur fait pivoter l'appareil (sauf pour le paramètre "non spécifié").

2.Vous souhaitez charger différentes mises en page pour les écrans horizontaux et verticaux :

1) Préparez deux ensembles différents de mises en page qu'Android ajustera automatiquement. la mise en page en fonction des écrans horizontaux et verticaux. Chargez différentes mises en page : Créez deux dossiers de mise en page : layout-landécran horizontal, layout-portécran vertical Jetez ensuite ces deux ensembles de fichiers de mise en page dans ces deux dossiers. Les noms de fichiers sont les mêmes, et Android jugera par lui-même, puis chargera la mise en page correspondante !

2) Faites votre propre jugement dans le code et chargez ce que vous voulez :

Nous chargeons généralement le fichier de mise en page dans la méthode onCreate(). Nous pouvons ajuster les écrans horizontaux et verticaux ici. Pour juger de l'état, le code clé est le suivant :

if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
setContentView(R.layout. écran horizontal);
}

else if (this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT) {
setContentView(R.layout.vertical screen);
}

3. Comment basculer le simulateur entre les écrans horizontaux et verticaux

Si votre simulateur est GM. Appuyez simplement sur le bouton de commutation du simulateur. Pour le simulateur natif, appuyez sur ctrl + f11/f12 pour basculer !


4. Problème de sauvegarde d'état :

Comme mentionné ci-dessus, il peut être complété via un paramètre Bundle SaveInstanceState ! Trois méthodes principales :


onCreate(Bundle SaveInstanceState);
onSaveInstanceState(Bundle outState);
onRestoreInstanceState(Bundle SaveInstanceState);

Il vous suffit de remplacer la méthode onSaveInstanceState() et d'écrire des données dans ce bundle, par exemple :

outState.putInt("num",1);

De cette façon, vous pouvez supprimer les données stockées à l'intérieur dans onCreate ou onRestoreInstanceState, mais vous devez vérifier si elles sont nulles avant de les prendre !

savedInstanceState.getInt("num");

Alors faites ce que vous voulez ~


6. Activités

D'accord, enfin, je vais joindre pour vous quelques activités courantes fournies par le système !

//1. Passer un appel
// Appeler le service client mobile 10086
Uri uri = Uri.parse("tel:10086");
Intent intent = new Intent(Intent .ACTION_DIAL, uri);
startActivity(intent);

//2. Envoyer un message texte
// Envoyer un message texte avec le contenu "Bonjour" au 10086
Uri uri = Uri.parse ("smsto:10086");
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra("sms_body", "Bonjour");
startActivity(intent );

//3. Envoyer un MMS (équivalent à l'envoi de messages texte avec pièces jointes)
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra("sms_body", "Bonjour ");
Uri uri = Uri.parse("content://media/external/images/media/23");
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.setType ("image/ png");
startActivity(intent);

//4. Ouvrez le navigateur :
// Ouvrez la page d'accueil de Google
Uri uri = Uri.parse("http ://www .baidu.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

//5. Envoyer un e-mail : (castré Service Google Pas question !!!!)
//Envoyer un e-mail à quelqu'un@domain.com
Uri uri = Uri.parse("mailto:someone@domain.com");
Intent intent = new Intent( Intent.ACTION_SENDTO, uri);
startActivity(intent);
// Envoyer un e-mail à quelqu'un@domain.com avec le contenu "Bonjour"
Intent intent = new Intent(Intent.ACTION_SEND );
intent.putExtra(Intent.EXTRA_EMAIL, "quelqu'un@domain.com");
intent.putExtra(Intent.EXTRA_SUBJECT, "Sujet");
intent.putExtra(Intent.EXTRA_TEXT, " Bonjour" );
intent.setType("text/plain");
startActivity(intent);
//Envoyer des e-mails à plusieurs personnes
Intent intent=new Intent(Intent.ACTION_SEND);
String[] tos = {"1@abc.com", "2@abc.com"}; // Destinataire
String[] ccs = {"3@abc.com", "4@abc .com"}; // CC
String[] bccs = {"5@abc.com", "6@abc.com"}; // Cci
intent.putExtra(Intent.EXTRA_EMAIL, tos) ;
intent.putExtra(Intent.EXTRA_CC, ccs);
intent.putExtra(Intent.EXTRA_BCC, bccs);
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intention. putExtra(Intent.EXTRA_TEXT, "Hello");
intent.setType("message/rfc822");
startActivity(intent);

//Afficher la carte :
/ /Ouvrez Google Maps Localisation de Pékin en Chine (39,9 de latitude nord, 116,3 de longitude est)
Uri uri = Uri.parse("geo:39.9,116.3");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

//7. Planification du chemin
//Planification du chemin : depuis quelque part à Pékin (39,9 de latitude nord, longitude est 116,3) Vers un endroit à Shanghai (31,2 latitude nord, 121,4 longitude est)
Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=39.9 116.3&daddr=31.2 121.4");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

///8. Lecture multimédia :
Intent intent = new Intent (Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/foo.mp3");
intent.setDataAndType(uri, "audio/mp3");
startActivity (intention);

//Récupérez tous les fichiers audio de la carte SD, puis lisez le premier =-=
Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, " 1");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

//9. Ouvrez l'appareil photo pour prendre des photos :
// Ouvrez le programme de l'appareil photo
Intent intent = new Intent( MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
// Obtenir les données photo
Bundle extras = intent.getExtras(); >Bitmap bitmap = (Bitmap) extras.get("data ");

//Un autre :
//Appel de l'application de la caméra système et stockage des photos prises
Intent intent = new Intent( MediaStore.ACTION_IMAGE_CAPTURE);
time = Calendar.getInstance().getTimeInMillis();
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment
.getExternalStorageDirectory().getAbsolutePath() +"/tucue", time + " .jpg")));
startActivityForResult(intent, ACTIVITY_GET_CAMERA_IMAGE);

//10. Récupérez et coupez l'image
// Récupérez et coupez l'image. picture
Intent intent = new Intent (Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.putExtra("crop", "true"); // Activer la découpe
intent.putExtra("aspectX ", 1); // Le rapport hauteur/largeur de la coupe est de 1:2
intent.putExtra("aspectY", 2);
intent.putExtra("outputX" , 20); // Enregistrer l'image Largeur et hauteur
intent.putExtra("outputY", 40);
intent.putExtra("output", Uri.fromFile(new File("/mnt/sdcard/ temp"))); // Enregistrer le chemin
intent.putExtra("outputFormat", "JPEG");//Format de retour
startActivityForResult(intent, 0);
//Couper une image spécifique
Intent intent = new Intent(" com.android.camera.action.CROP");intent.setClassName("com.android.camera", "com.android.camera.CropImage");
intent.setData(Uri.fromFile(new File("/mnt/sdcard/temp"))); 🎜>intent.putExtra("outputX", 1); // Le rapport hauteur/largeur du découpage est 1:2
intent.putExtra("outputY", 2);
intent.putExtra("aspectX", 20); // Enregistre la largeur et la hauteur de l'image
intent.putExtra("aspectY", 40);
intent.putExtra("scale", true);
intent.putExtra("noFaceDetection ", true);
intent.putExtra("output", Uri.parse("file:///mnt/sdcard/temp"));
startActivityForResult(intent, 0);

/ /11. Ouvrez Google Market
// Ouvrez Google Market et entrez directement dans la page détaillée du programme
Uri uri = Uri.parse("market://details?id=" + "com.demo .app") ;
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

//12. Entrez dans l'interface de configuration du téléphone mobile :
/ /Entrez l'interface de configuration du réseau sans fil (d'autres peuvent tirer des conclusions à partir d'un exemple)
Intent intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
startActivityForResult(intent, 0);

//13. Installer apk :
Uri installUri = Uri.fromParts("package", "xxx", null);
returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);

/ /14. Désinstaller apk :
Uri uri = Uri.fromParts("package", strPackageName, null
Intent it = new Intent(Intent.ACTION_DELETE, uri); 🎜>
//15. Envoyer les pièces jointes :
Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_SUBJECT, "Le texte du sujet de l'e-mail"); mp3");
sendIntent.setType("audio/mp3");
startActivity(Intent.createChooser(it, "Choose Email Client"));

// 16. Entrez le contact page :
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(People.CONTENT_URI);
startActivity(intent); >//17. Afficher le contact spécifié :
Uri personUri = ContentUris.withAppendedId(People.CONTENT_URI, info.id);//info.id Contact ID
Intent intent = new Intent ();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(personUri);
startActivity(intent);


Résumé de cette section :

D'accord, cela ne ressemble pas à un tutoriel d'introduction après l'avoir écrit, haha, mais c'est bien d'en savoir plus. C'est le premier aperçu de. cette section. C'est parti ~ Nous continuerons à étudier cette activité dans la section suivante, comme le transfert de données, le mode de démarrage, etc. ~ Restez à l'écoute ~