[JAVA] [Android] Développer un service permettant aux étudiants universitaires de vérifier l'état de fonctionnement des bus circulant dans l'université.

Contexte

Une équipe de quatre développera un service qui vous permettra de vérifier l'emplacement actuel et l'état de la congestion du bus sur le Web en analysant les informations de localisation du bus circulant sur le campus et l'image à l'intérieur du bus dans une recherche gratuite à l'université. devenu. Le développement de toute l'équipe s'est installé, et je l'ai posté avec l'intention de résumer les domaines dont j'étais en charge.

Cela peut être difficile à comprendre car il se concentre sur le contenu dont j'étais en charge. Je vous serais très reconnaissant de bien vouloir signaler les points difficiles à comprendre ** ou les points qui devraient être corrigés **.

Veuillez vous référer au matériel affiché sur slideshare pour le contenu des autres responsables. Essayez de développer un système de bus de circulation universitaire en équipe. Le code source est publié sur GitHub.

1. Introduction

1.1 Qu'est-ce qu'un client de bus?

Avec ce système, j'étais en charge du développement du client bus. Le rôle du client de bus est de mesurer les informations de localisation et l'état de congestion du bus. Envoi de l'image dans le bus au serveur API. C'est le rôle du client de bus dans tout le système. システム全体の中でのバスクライアントの役割

1.2 spécifications

Un client de bus est réalisé en développant une application Android avec les trois fonctions suivantes et en installant un terminal Android sur lequel l'application est installée dans le bus.

  1. Envoyez toutes les 10 secondes les données de localisation acquises à partir du Wi-Fi et du GPS au serveur API.
  2. Encodez l'image dans le bus en Base64 et envoyez-la au serveur API toutes les 10 secondes.
  3. Envoyez les données de transmission de 1. et 2. au format JSON.

Le contenu des données JSON (à gauche: informations de position, à droite: informations d'image). JSONデータの中身(左:位置情報、右:画像情報)

1.3 Environnement utilisé

1.4 Description du fichier

tamabus   ├ AndroidManifest.xml   ├ MainActivity.java   ├ UploadTask.java   ├ activity_main.xml   ├ colors.xml   ├ strings.xml   └ styles.xml

--AndroidManifest.xml: un fichier qui décrit les autorisations à utiliser --MainActivity.java: Le programme décrit ici fonctionne. --UploadTask.java: classe de traitement de communication asynchrone lors de la publication de données sur le serveur --activity_main.xml: fichier qui décrit la disposition de l'écran de l'application --colors.xml, strings.xml, styles.xml: fichiers contenant des informations telles que les couleurs, les chaînes de caractères et les formats utilisés dans l'application.

2. Papier principal

2.1 Écran de l'application, déroulement des fonctions

Voici l'écran de l'application. La caméra est toujours activée et l'image est projetée en continu sur l'objet TextureView, qui est un composant de l'interface graphique Android. Sous l'objet TextureView, les lettres bleues représentent la latitude et les lettres rouges représentent la longitude. Sous la latitude et la longitude, le temps écoulé depuis le lancement de l'application est affiché. Le temps écoulé est mis à jour toutes les 10 secondes, et lorsque le temps écoulé est mis à jour, on peut voir que les informations de position et les informations d'image ont été transmises.

アプリ画面

Le déroulement après le lancement de l'application est le suivant. Une fois le processus d'initialisation des variables, etc. effectué, il est confirmé si l'autorité d'information de position et l'autorisation d'utilisation de la caméra sont autorisées. Si les deux autorisations sont autorisées, le flux allant de «Obtenir les informations de localisation du GPS» à «Post-image encodée» est bouclé toutes les 10 secondes.

アプリ起動からのフロー

2.2 Problèmes survenus

2.2.1 L'appareil photo ne peut pas prendre des photos entièrement automatiquement.

Au début du développement, je pensais que la prise de vue automatique avec un appareil photo pouvait utiliser la fonction de classe Intent d'Android Studio pour appeler une véritable application d'appareil photo et prendre automatiquement des photos avec l'application appareil photo lancée. Cependant, il s'est avéré que l'application pour appareil photo authentique ne peut pas prendre de photos à moins que quelqu'un n'appuie sur l'obturateur et qu'elle ne peut pas prendre de photos automatiquement. Comment obtenir l'image dans le bus était le plus gros problème au début du développement.

2.2.2 Les données d'image codées publiées ne peuvent pas être décodées côté réception.

L'image prise côté client de bus est codée avec Base64 et les données d'image converties en chaîne de caractères sont envoyées à localhost dans le test. Le côté récepteur a réussi à recevoir la chaîne de caractères des données d'image, mais n'a pas pu décoder la chaîne de caractères.

2.3 Solutions aux problèmes qui surviennent

2.3.1 Ne lancez pas la véritable application appareil photo.

Je cherchais des informations sur la façon d'obtenir une image autre que de lancer une véritable application d'appareil photo et d'appuyer sur le déclencheur pour prendre une photo, mais je ne l'ai pas trouvée. J'ai donc pensé que je pourrais le trouver si je cherchais des informations en anglais, et lorsque je cherchais des informations en anglais, j'ai capturé ce qu'il y avait dans la caméra dans l'objet TextureView du composant GUI, et capturé l'image qui a été transférée à l'objet TextureView dans un certain laps de temps. J'ai trouvé une méthode appelée, et j'ai pu résoudre le problème avec cette méthode.

2.3.2 L'affichage forcera le remplacement du signe + par un espace demi-largeur.

Si je l'ai décodé du côté Android avant d'envoyer la chaîne de caractères codés, il pourrait être décodé correctement, j'ai donc supposé que Post pourrait en être la cause. Après enquête, j'ai trouvé que le symbole + dans la chaîne de caractères publiée a été remplacé par un espace demi-largeur. J'ai envoyé les données à localhost dans le test. La ligne rouge ci-dessous est la pièce convertie en un espace demi-largeur. 赤線部が半角スペースに変換された箇所

Le problème a été résolu en créant un programme qui remplace l'espace demi-largeur inclus dans la chaîne de caractères reçue côté serveur par le symbole +.

3. Conclusion

3.1 J'ai essayé d'envoyer à localhost

Un environnement d'affichage des données JSON des informations de localisation et des informations d'image reçues par XAMPP a été construit sur localhost. Vous pouvez voir que les données peuvent être envoyées correctement. localhost側で受信したデータの中身

3.2 Plans futurs

Le client de bus dont je suis en charge est terminé, je prévois donc d'aider à l'analyse d'image qui analyse le degré de congestion des images transmises. Je voudrais ajuster le calendrier avec les membres, reprendre le développement et le mettre en service.

Recommended Posts

[Android] Développer un service permettant aux étudiants universitaires de vérifier l'état de fonctionnement des bus circulant dans l'université.
Développement Android, comment vérifier null dans la valeur de l'objet JSON
Créer une ArrayList qui vous permet de lancer et de récupérer les coordonnées d'un plan bidimensionnel
Comment utiliser UsageStatsManager dans Android Studio (Comment vérifier l'heure de démarrage d'autres applications)
Un mémo du programme que vous pouvez réaliser que la probabilité de lancer des dés est d'environ 1/6
Créer une base de données de tous les livres qui ont circulé au Japon au siècle dernier
J'ai essayé de développer la fonction de cache d'Application Container Cloud Service dans l'environnement local
Vérifiez la dépendance d'un artefact maven spécifique dans Coursier
Commande pour vérifier le nombre et l'état des threads Java
Un programme qui compte le nombre de mots dans une liste
Comment vérifier le contenu de la chaîne de caractères java de longueur fixe
Trois raisons de frustration avant la sortie des services Web
Vérifier l'état de migration des rails
Un mémo sobrement accro à la demande de multipart / form-data
L'histoire de l'oubli de fermer un fichier en Java et de l'échec
Exemple de programme qui renvoie la valeur de hachage d'un fichier en Java
Comment changer la valeur d'une variable à un point d'arrêt dans intelliJ
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java