Forum Clubic

Exécuter une procédure au lancement de l'activity?

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


package com.citaq.v5print;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.Environment;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import woyou.aidlservice.jiuiv5.ICallback;
import woyou.aidlservice.jiuiv5.IWoyouService;

//----- start of Activity
public class MainActivity extends Activity {
	
	Button bt_printFile;

	String sDataFile;
	String ligne;
	String ReadBuffer = "";
	protected static final String TAG = "V5Print";
	IWoyouService woyouService;

	//------------------------------------------------------------------------- onPause
	@Override
	protected void onPause() {
		super.onStop();
	}
	
	//------------------------------------------------------------------------- onCreate
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		Intent intent = new Intent();
		intent.setPackage("woyou.aidlservice.jiuiv5");
		intent.setAction("woyou.aidlservice.jiuiv5.IWoyouService");
		startService(intent);
		bindService(intent, connService, Context.BIND_AUTO_CREATE);
		init();
		//Log.d(TAG, "Exécution de PrintData()");
		//PrintData();		//fichier echange.txt supprimé mais pas d'impression
	}
	
	
	//------------------------------------------------------------------------- onStart
	// Arret brutal de l'application et message : "V5Print" s'est arrêté.
	//-------------------------------------------------------------------------
	//@Override
	//protected void onStart() {
	//	PrintData();
	//}

	//-------------------------------------------------------------------------Impression
	private void PrintData() {
		File sdLien = Environment.getExternalStorageDirectory();
        File monFichier = new File(sdLien + "/echange.txt");
        
        if ( monFichier.exists()) {
        	Log.d(TAG, "Fichier d'échange présent.");
        	try {
        		//----- Lecture du fichier d'échange
        		BufferedReader fichier = new BufferedReader(new FileReader(monFichier));
        		while ((ligne = fichier.readLine()) != null) {
        			ReadBuffer = ReadBuffer + ligne + "n";
        			}
        		//----- Fermeture et suppression du fichier d'échange
        		fichier.close();
        		monFichier.delete();
        		} catch (Exception e) {
        			e.printStackTrace();
        		}
        	
        	if (ReadBuffer != "") { 
                //-----Impression
        		Log.d(TAG, "Impression en cours..." + "n" + ReadBuffer);
        		try {
        			woyouService.printText(ReadBuffer + "n", callback);
        			
        			//----- Bye Bye...
        	       	// System.exit(0);   // Très déconseillé (je ne sais pas pourquoi)
        	        // android.os.Process.killProcess(android.os.Process.myPid());
        	        finish();
        		} catch (RemoteException e) {
        			e.printStackTrace();
        		} catch (Exception e) {
        			e.printStackTrace();
        		}
        	} // End if
        	else
        	{
        		Log.d(TAG, "Fichier vide !");
                //----- Bye Bye...
               	// System.exit(0);   // Très déconseillé (je ne sais pas pourquoi)
                // android.os.Process.killProcess(android.os.Process.myPid());
                finish();
        	}
        }	// End if

        //----- Bye Bye...
       	// System.exit(0);   // Très déconseillé (je ne sais pas pourquoi)
        // android.os.Process.killProcess(android.os.Process.myPid());
        finish();
	}
	
	//------------------------------------------------------------------------- Initialisation
	private void init(){

		//--------------------------------------------------------------------- Bouton printFile
		bt_printFile = (Button) findViewById(R.id.bt_PrintFile);
		bt_printFile.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				PrintData();
		   }		// End onClick
		});		// End bt_printFile.setOnClickListener
	}	// end of init()
	
	//-------------------------------------------------------------------------
	private ServiceConnection connService = new ServiceConnection() {
		@Override
		public void onServiceDisconnected(ComponentName name) {
			woyouService = null;
		}
		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			woyouService = IWoyouService.Stub.asInterface(service);
			
			try {
				woyouService.printerInit(callback);
			} catch (RemoteException e) {
				Log.d(TAG, "registerCallback failed.");
			}
			
		}
	};	// End connService
	
	//-------------------------------------------------------------------------
	private ICallback callback = new ICallback.Stub() {

		@Override
		public void onRunResult(boolean isSuccess) throws RemoteException {
			Log.d(TAG, "ICallback--->" + isSuccess); 
		}

		@Override
		public void onReturnString(String result) throws RemoteException {
			Log.d(TAG, "ICallback--->" + result); 
		}

		@Override
		public void onRaiseException(int code, String msg) throws RemoteException {
			Log.d(TAG, "onRaiseException--->" + msg);
		}		
		
	};	// End callback
	
}	// End Activity

Suite…
Afin de comprendre pourquoi cela ne fonctionnait pas en mettant l’appel à PrintData() à la fin du onCreate(), j’ai mis des Log.d() quasiment à chaque ligne et le résultat donne :
///// AVEC LE BOUTON
D/V5Print (18685): Start of OnCreate()
D/V5Print (18685): Start of init()
D/V5Print (18685): End of init()
D/V5Print (18685): End of OnCreate()
D/V5Print (18685): onServiceConnected()
D/V5Print (18685): woyouService.printerInit
D/V5Print (18685): onReturnString-ICallback—>733
D/V5Print (18685): onRunResult-ICallback—>true
… Attente du Clic sur le bouton “Print”…
D/V5Print (18685): Execution de PrintData() dans onClick()
D/V5Print (18685): Start of PrintData()
D/V5Print (18685): echange.txt found.
D/V5Print (18685): OPEN echange.txt
D/V5Print (18685): CLOSE echange.txt
D/V5Print (18685): DELETE echange.txt
D/V5Print (18685): Start of print.
D/V5Print (18685): Ceci est un test…
D/V5Print (18685): Le 28/11/2016
D/V5Print (18685): ?á 13:13:01
D/V5Print (18685): ligne 01 a A
D/V5Print (18685): ligne 02 b B
D/V5Print (18685): ligne 03 c C
D/V5Print (18685): ligne 04 d D
D/V5Print (18685): ligne 05 e E
D/V5Print (18685): ligne 06 f F
D/V5Print (18685): End of print. Bye Bye

///// AVEC PrintData() à la fin de onCreate()
D/V5Print (18900): Start of OnCreate()
D/V5Print (18900): Start of init()
D/V5Print (18900): End of init()
D/V5Print (18900): Execution de PrintData() dans OnCreate()
D/V5Print (18900): Start of PrintData()
D/V5Print (18900): echange.txt found.
D/V5Print (18900): OPEN echange.txt
D/V5Print (18900): CLOSE echange.txt
D/V5Print (18900): DELETE echange.txt
D/V5Print (18900): Start of print.
D/V5Print (18900): Ceci est un test…
D/V5Print (18900): Le 28/11/2016
D/V5Print (18900): ?á 13:17:50
D/V5Print (18900): ligne 01 a A
D/V5Print (18900): ligne 02 b B
D/V5Print (18900): ligne 03 c C
D/V5Print (18900): ligne 04 d D
D/V5Print (18900): ligne 05 e E
D/V5Print (18900): ligne 06 f F

// on n’est pas passé par private ServiceConnection connService()
// ni par private ICallback callback = new ICallback.Stub()
// ==> Erreur !
D/V5Print (18900): Erreur Exception woyouService.printText
D/V5Print (18900): echange.txt not found… Bye Bye
D/V5Print (18900): End of OnCreate()
D/V5Print (18900): onServiceConnected()
D/V5Print (18900): woyouService.printerInit
D/V5Print (18900): onReturnString-ICallback—>768
D/V5Print (18900): onRunResult-ICallback—>true

La question est donc Comment forcer le passage avant de lancer PrintData() ???

RESOLU
Il suffisait de mettre l’appel à la fonction PrintData() juste après woyouService.printerInit(callback);