Comment exécuter une procédure au lancement de l'Activity ?

  • Réponses :2
Philippe Pasquali
  • Posts de Forum 3

28 nov. 2016 à 12:04:40 via site

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

Répondre
Philippe Pasquali
  • Posts de Forum 3

28 nov. 2016 à 15:27:14 via site

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() ???

Répondre
Philippe Pasquali
  • Posts de Forum 3

29 nov. 2016 à 16:48:20 via site

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

Répondre