Votre question
Résolu

[Android-Java] Exécuter une procédure au lancement de l'Activity ?

Tags :
  • Applications mobiles
  • Android
  • Java
Dernière réponse : dans Programmation
28 Novembre 2016 12:52:34

Bonjour,
Le but de ce mini-programme est d'imprimer un fichier sur l'imprimante intégrée au smartphone.
J'ai donc réussi tant bien que mal à modifier le seul exemple de code java en ma possession, pour arriver à faire ce dont j'ai besoin.

Le principe c'est qu'une application A (Écrite en Windev Mobile) génère un fichier texte puis lance l'application B (écrite en java avec Eclipse)
Pour le moment, quant l'application B prend le focus, un bouton apparait.
Quand je clic dessus l'impression se fait et l'Activity est fermée rendant la main à l'application A.
Le process "manuel" fonctionne .

Maintenant j'aimerais ne plus à avoir à cliquer sur ce bouton... et là je sèche lamentablement

J'ai testé l'appel à PrintData()
- après init(); dans le onCreate : rien ne s'imprime, pourtant le fichier à imprimer est bien supprimé et je rend bien la main à l'application A.
- dans onStart : Arrêt brutal de l'application et message : "V5Print" s'est arrêté.

Mes connaissances en java sont plus que limitées...
Merci d'avance à ceux / celles qui m'apporteront leur aide
  1. package com.citaq.v5print;
  2.  
  3. import android.app.Activity;
  4. import android.content.ComponentName;
  5. import android.content.Context;
  6. import android.content.Intent;
  7. import android.content.ServiceConnection;
  8. import android.os.Bundle;
  9. import android.os.Environment;
  10. import android.os.IBinder;
  11. import android.os.RemoteException;
  12. import android.util.Log;
  13. import android.view.View;
  14. import android.view.View.OnClickListener;
  15. import android.widget.Button;
  16. import java.io.BufferedReader;
  17. import java.io.File;
  18. import java.io.FileReader;
  19. import woyou.aidlservice.jiuiv5.ICallback;
  20. import woyou.aidlservice.jiuiv5.IWoyouService;
  21.  
  22. //----- start of Activity
  23. public class MainActivity extends Activity {
  24.  
  25. Button bt_printFile;
  26.  
  27. String sDataFile;
  28. String ligne;
  29. String ReadBuffer = "";
  30. protected static final String TAG = "V5Print";
  31. IWoyouService woyouService;
  32.  
  33. //------------------------------------------------------------------------- onPause
  34. @Override
  35. protected void onPause() {
  36. super.onStop();
  37. }
  38.  
  39. //------------------------------------------------------------------------- onCreate
  40. @Override
  41. protected void onCreate(Bundle savedInstanceState) {
  42. super.onCreate(savedInstanceState);
  43. setContentView(R.layout.activity_main);
  44.  
  45. Intent intent = new Intent();
  46. intent.setPackage("woyou.aidlservice.jiuiv5");
  47. intent.setAction("woyou.aidlservice.jiuiv5.IWoyouService");
  48. startService(intent);
  49. bindService(intent, connService, Context.BIND_AUTO_CREATE);
  50. init();
  51. //Log.d(TAG, "Exécution de PrintData()");
  52. //PrintData(); //fichier echange.txt supprimé mais pas d'impression
  53. }
  54.  
  55.  
  56. //------------------------------------------------------------------------- onStart
  57. // Arret brutal de l'application et message : "V5Print" s'est arrêté.
  58. //-------------------------------------------------------------------------
  59. //@Override
  60. //protected void onStart() {
  61. // PrintData();
  62. //}
  63.  
  64. //-------------------------------------------------------------------------Impression
  65. private void PrintData() {
  66. File sdLien = Environment.getExternalStorageDirectory();
  67. File monFichier = new File(sdLien + "/echange.txt");
  68.  
  69. if ( monFichier.exists()) {
  70. Log.d(TAG, "Fichier d'échange présent.");
  71. try {
  72. //----- Lecture du fichier d'échange
  73. BufferedReader fichier = new BufferedReader(new FileReader(monFichier));
  74. while ((ligne = fichier.readLine()) != null) {
  75. ReadBuffer = ReadBuffer + ligne + "\n";
  76. }
  77. //----- Fermeture et suppression du fichier d'échange
  78. fichier.close();
  79. monFichier.delete();
  80. } catch (Exception e) {
  81. e.printStackTrace();
  82. }
  83.  
  84. if (ReadBuffer != "") {
  85. //-----Impression
  86. Log.d(TAG, "Impression en cours..." + "\n" + ReadBuffer);
  87. try {
  88. woyouService.printText(ReadBuffer + "\n", callback);
  89.  
  90. //----- Bye Bye...
  91. // System.exit(0); // Très déconseillé (je ne sais pas pourquoi)
  92. // android.os.Process.killProcess(android.os.Process.myPid());
  93. finish();
  94. } catch (RemoteException e) {
  95. e.printStackTrace();
  96. } catch (Exception e) {
  97. e.printStackTrace();
  98. }
  99. } // End if
  100. else
  101. {
  102. Log.d(TAG, "Fichier vide !");
  103. //----- Bye Bye...
  104. // System.exit(0); // Très déconseillé (je ne sais pas pourquoi)
  105. // android.os.Process.killProcess(android.os.Process.myPid());
  106. finish();
  107. }
  108. } // End if
  109.  
  110. //----- Bye Bye...
  111. // System.exit(0); // Très déconseillé (je ne sais pas pourquoi)
  112. // android.os.Process.killProcess(android.os.Process.myPid());
  113. finish();
  114. }
  115.  
  116. //------------------------------------------------------------------------- Initialisation
  117. private void init(){
  118.  
  119. //--------------------------------------------------------------------- Bouton printFile
  120. bt_printFile = (Button) findViewById(R.id.bt_PrintFile);
  121. bt_printFile.setOnClickListener(new OnClickListener() {
  122. @Override
  123. public void onClick(View arg0) {
  124. PrintData();
  125. } // End onClick
  126. }); // End bt_printFile.setOnClickListener
  127. } // end of init()
  128.  
  129. //-------------------------------------------------------------------------
  130. private ServiceConnection connService = new ServiceConnection() {
  131. @Override
  132. public void onServiceDisconnected(ComponentName name) {
  133. woyouService = null;
  134. }
  135. @Override
  136. public void onServiceConnected(ComponentName name, IBinder service) {
  137. woyouService = IWoyouService.Stub.asInterface(service);
  138.  
  139. try {
  140. woyouService.printerInit(callback);
  141. } catch (RemoteException e) {
  142. Log.d(TAG, "registerCallback failed.");
  143. }
  144.  
  145. }
  146. }; // End connService
  147.  
  148. //-------------------------------------------------------------------------
  149. private ICallback callback = new ICallback.Stub() {
  150.  
  151. @Override
  152. public void onRunResult(boolean isSuccess) throws RemoteException {
  153. Log.d(TAG, "ICallback--->" + isSuccess);
  154. }
  155.  
  156. @Override
  157. public void onReturnString(String result) throws RemoteException {
  158. Log.d(TAG, "ICallback--->" + result);
  159. }
  160.  
  161. @Override
  162. public void onRaiseException(int code, String msg) throws RemoteException {
  163. Log.d(TAG, "onRaiseException--->" + msg);
  164. }
  165.  
  166. }; // End callback
  167.  
  168. } // End Activity

Autres pages sur : android java executer procedure lancement activity

Meilleure solution

a b Ë Android
28 Novembre 2016 21:54:53

Dans l'ordre des appels, tu as onCreate (pour tout créer), onStart (lorsque l'activity devient visible) et onResume (lorsque les intéractions utilisateur commencent) avant le démarrage de l'application.

Si je comprends bien, tu utilises un service pour imprimer, alors le mieux serait d'attendre que le service soit démarré, non ?
Je veux dire que tu as implémenté ServiceConnection.onServiceConnected (appelé lorsque tu es connecté au service).
Ensuite, tu fais un woyouService.printerInit pour, je suppose, initialiser ton service. Et tu as implémenté le onRunResult et onReturnString de cet init.
Je suppose qu'une de ces 2 méthodes est donc appelée lorsque tu es connecté au service et que celui-ci est initialisé.

Donc, je dirais que le meilleur endroit pour faire ton impression serait dans onRunResult ou onReturnString (ne sachant pas vraiment ce que fait ton service :)  ).

Si ça ne marche pas, montre nous les logs de ton application.
partage
29 Novembre 2016 12:35:36

Bonjour
@CRicky
Je tiens à vous remercier d'avoir pris le temps de répondre au débutant java que je suis...

Hier j'ai suivi cette voie en posant des Log.d() tout le long du code pour bien suivre l'enchainement du code.
Je me suis vite aperçu que dans le cas du "bouton" on passait par le «private ServiceConnection connService = new ServiceConnection()» et pas du tout si je mettais l'appel à «PrintData();» à la fin du «OnCreate()».
Je l'ai donc mis juste après «woyouService.printerInit(callback);» et cela fonctionne à 100%.

Merci encore
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS