Il Forum è consultabile solo in modalità lettura. Per domande o consigli iscriviti al nostro GRUPPO FACEBOOK / COMMUNITY cliccando qui

chiusura applicazione e stampe a video

Discussione in 'Development' iniziata da ArconteOscuro, 1 Giu 2010.

  1. ArconteOscuro

    ArconteOscuro Baby Droid

    Iscritto:
    31 Mag 2010
    Messaggi:
    9
    "Mi Piace":
    0
    Salve a tutti, ho un'applicazione per androidi definita in questa Activity:

    Codice:
    package com.example.prova;
    
    import java.util.Timer;
    import java.util.TimerTask;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.EditText;
    import android.widget.RelativeLayout;
    import android.widget.ScrollView;
    import android.widget.TextView;
    
    //import spectec3783.Message.MyTask;
    import it.tilab.smart_io.Smart_IO;
    import it.tilab.utilities.Utilities;
    
    public class Prova extends Activity
    {
    	
    	    volatile TextView tv;
    	    ScrollView sv;
    	    //String url = "file://localhost/E:/SMART_IO.CRD";
    	    String url = "/sdcard/smart_io.crd";
    	    private int ret_value;
    	    
    	    private static final int MENU_QUIT = 0;
    	    private static final int START_TEST = 1;
    	    private static final int STOP_TEST = 2;
    	    private static final int SET_PAYLOAD = 3;
    	    private static final int SAVE_PAYLOAD = 4;
    	    
    	    private static final int MAX_PAYLOAD_ALLOWED = 50;   
            private static final String DEMO_MODE_STR = "Set payload lenght";
    
            private boolean testStarted = false;
            private int len_payload = 10;
            private int state = START_TEST;
            private int sendFailed, noDataReceived, avgRemoteLQI, avgRemoteRSSI, avgLocalLQI, avgLocalRSSI, cntReceived;
    
            Timer timerRead = new Timer();
            TimerTask taskRead;
        
            EditText textField2;
            RelativeLayout lt, lt2; 
    	    
        public void onCreate(Bundle savedInstanceState) {
        	try {	
        	    super.onCreate(savedInstanceState);
    	     	tv = new TextView(this);  
    	    	sv = new ScrollView(this);
    	    	tv.setVerticalScrollBarEnabled(true);
    	    	
    	    	taskRead = new MyTaskRead();
    	    	
    	    	lt = new RelativeLayout(this);
    	    	lt2 = new RelativeLayout(this);
    	    	textField2 = new EditText(this);
    	    	lt.addView(textField2);
    	    	timerRead.schedule( taskRead, 200, 300 ); 
    	    	jbInit();
    	    }
    	    catch (Exception e) {
    	            e.printStackTrace();
    	            tv.append(e.toString());
    		    	setContentView(tv);
    	    }	   
    	  }
        
          private void clearMenu(Menu menu) {
        	menu.removeItem(STOP_TEST);
      		menu.removeItem(SET_PAYLOAD);
      		menu.removeItem(SAVE_PAYLOAD);
      		menu.removeItem(MENU_QUIT);
      		menu.removeItem(START_TEST);
          }
        
          public boolean onPrepareOptionsMenu(Menu menu) {
        	  super.onPrepareOptionsMenu(menu);
        	  switch (state) {
        	   case START_TEST: 
        		clearMenu(menu);
        	    menu.add(0, START_TEST, 0, "Start Test");
        	    menu.add(0, SET_PAYLOAD, 0, "Set Payload");
          	    menu.add(0, MENU_QUIT, 0, "Exit");
          	    break;
        	   case STOP_TEST: 
        		clearMenu(menu);   
           	    menu.add(0, STOP_TEST, 0, "Stop Test");
           	    menu.add(0, MENU_QUIT, 0, "Exit");
           	    break;
        	   case SET_PAYLOAD: 
           		clearMenu(menu);   
              	menu.add(0, SAVE_PAYLOAD, 0, "Save Payload");
              	menu.add(0, MENU_QUIT, 0, "Exit");
              	break;
        	  }     	  
    	      return true;
          }  
    	  
    	  public void onDestroy(Bundle savedInstanceState) {
    		  timerRead.cancel();
    		  super.onDestroy();
    	  }
    	  
    	  /* Handles item selections */ 
    	  public boolean onOptionsItemSelected(MenuItem item) { 
    		   switch (item.getItemId()) { 
    		    case START_TEST: 
    		    	 state = STOP_TEST;
    		    	 testStarted = true;
    		         sendFailed = 0;
    		         noDataReceived = 0;
    		         avgRemoteLQI = 0;
    		         avgRemoteRSSI = 0;
    		         avgLocalLQI = 0;
    		         avgLocalRSSI = 0;
    		         cntReceived = 0;
    		         sendTestMsg();  
    		        return true; 
    		    case STOP_TEST: 
    		    	 state = START_TEST;  
    		    	 testStarted = false;
    		        return true; 
    		    case SET_PAYLOAD: 
    		    	state = SET_PAYLOAD; 
    		    	this.setContentView(lt);
    		        return true; 
    		    case SAVE_PAYLOAD: 
    		    	String payloadStr = textField2.getText().toString();
    		    	try {
    		            int pInt = Utilities.getIntFromString(payloadStr);
    		            if (pInt > MAX_PAYLOAD_ALLOWED) {
    		            	state = START_TEST; 
    		                setContentView(tv);
    		                initGUI();
    		            	tv.append("Spiacente! Il payload puo' essere al massimo\n");
    		            	tv.append("di "+MAX_PAYLOAD_ALLOWED+" bytes! :) \n");
    		            }
    		            else {
    		                len_payload = pInt;
    		                state = START_TEST; 
    		                setContentView(tv);
    		                initGUI();
    		                tv.append("Lunghezza payload salvata! :) \n");
    		            }
    
    		        }
    		        catch (Exception e) {
    		        	state = START_TEST; 
    	                setContentView(tv);
    	                initGUI();
    		        	tv.append("Mi faccia gentilmente la cortesia\n");
    		        	tv.append("di inserire un numero valido.\n");
    		        }
    		    	return true; 
    		    case MENU_QUIT: 
    		    	timerRead.cancel();
    				super.onDestroy();
    		    	return true; 
    		   } 
    		   return false; 
    	  }
    	    	
    	  private void jbInit() throws Exception {
    	     boolean ret = Smart_IO.startupSmartIO(url);
    	     if (!ret) {
    	    	 tv.append("\nNO DEVICE\n");
    		     setContentView(tv); 
    	     }
    		  
    	     ret_value = Smart_IO.ListDev();
    		 if (Smart_IO.Check_CMD_Status(ret_value) == false) {
    		    	tv.append("\nNo Find IO SD CARD\n");
    		    	setContentView(tv);		        
    		 } 
    		 else {
    		    	Smart_IO.GetFirmcodeVersion();
    		    		
    		    	ret = Smart_IO.Set_IO_Device_Configuration();
    		    	if (!ret) {
    		    		tv.append("Set IO Device Configuration failed... :( \n");
    		    	    return;
    		    	}
    		    		
    		    	ret = Smart_IO.Ini_CSR_Device();
    		    	if (!ret) {
    		    		tv.append("Initial Device failed... :( \n");
    		    	    return;
    		    	}
    		    	
    		    	
    		    	tv.append("-- RSSI/LQI Tester --  \n");
    		    	setContentView(tv); 	
    		    }
    
    		return;
    	     
    	  }
    	    
    	  private void showData() {
    		  initGUI();
              int toDiv = 10 - noDataReceived - sendFailed;
              if (toDiv == 0) toDiv = 1;
              tv.append("Remote Device Data \n");
              tv.append("LQI  = "+(avgRemoteLQI/toDiv)+" \n");
              tv.append("RSSI = -"+(avgRemoteRSSI/toDiv)+" \n");
              tv.append("Local Device Data \n");
              tv.append("LQI  = "+(avgLocalLQI/toDiv)+" \n");
              tv.append("RSSI = -"+(avgLocalRSSI/toDiv)+" \n");
              tv.append("**** \n");
              if (noDataReceived > 0) tv.append("Packet lost: "+noDataReceived+"\n");
              if (sendFailed > 0) tv.append("Send failed: "+sendFailed+"\n");
              setContentView(tv); 
    	  }
    	    
    	  public class MyTask extends TimerTask
    	  {
    	      public void run()
    	      {
    	         /* TagW = 0x0000;
    	         InsIdxW = 0x00F1;
    	         DataPayloadLenW = 0x00;
    	         CustomerLenW = 0x02; */
    
    	         // ret_value = WriteIOCommand();
    
    	      }
    	  }
    	  
    	  public class MyTaskRead extends TimerTask
    	  {
    		  public void run() {
    	         // effettuo una lettura
    	         if (testStarted) {
    	             boolean success;
    	             
    	             if (cntReceived == 10) {
    	            	/* try {   
    	            		mytv.setText("");
    	          		}
    	          		catch (Exception e) {}
    	                int toDiv = 10 - noDataReceived - sendFailed;
    	                if (toDiv == 0) toDiv = 1;
    	                mytv.append("Remote Device Data \n");
    	                mytv.append("LQI  = "+(avgRemoteLQI/toDiv)+" \n");
    	                mytv.append("RSSI = -"+(avgRemoteRSSI/toDiv)+" \n");
    	                mytv.append("Local Device Data \n");
    	                mytv.append("LQI  = "+(avgLocalLQI/toDiv)+" \n");
    	                mytv.append("RSSI = -"+(avgLocalRSSI/toDiv)+" \n");
    	                mytv.append("**** \n");
    	                if (noDataReceived > 0) mytv.append("Packet lost: "+noDataReceived+"\n");
    	                if (sendFailed > 0) mytv.append("Send failed: "+sendFailed+"\n");
    	                setContentView(mytv); 
    	            	 */
    	            	showData();
    
    	                // resetto i valori
    	                avgRemoteLQI = 0;
    	                avgRemoteRSSI = 0;
    	                avgLocalLQI = 0;
    	                avgLocalRSSI = 0;
    	                noDataReceived = 0;
    	                sendFailed = 0;
    	                cntReceived = 0;
    	             }
    
    	             // se ho inviato il primo messaggio leggo
    	             success = Smart_IO.readData();
    
    	             if (!success) {
    	                 // append("success FALSE \n");
    	                 // aggiorno il contatore dei messaggi persi
    	                 noDataReceived++;
    	                 cntReceived++;
    	                 // invio il messaggio
    	                 sendTestMsg();
    	             }
    	             else {
    	              cntReceived++;
    
    	              String payload = Smart_IO.getPayloadHex();
    	              if (Utilities.isStringNotNull(payload)) {
    	                 decodeData(payload);
    	              }
    	              else {
    	                 noDataReceived++;
    	              }
    	              
    	              // invio il nuovo messaggio
    	              sendTestMsg();
    	             }          
    	          }
    	         else {
    	             // append("TestStarted false! :(");
    	         }
    	      }
    	  }
    	  
    	  private void initGUI() {
    		  try {   
    		   tv.setText("");
    		  }
    		  catch (Exception e) {}
    		     // this.append(textField2);
    	  }
    
          private void sendTestMsg() {
    		    // invio il messaggio
    		    byte dataToWrite[] = new byte[len_payload];
    		    dataToWrite[0] = (byte)0x80;
    		    dataToWrite[1] = (byte)len_payload;
    		    for (int i=2; i<len_payload; i++) dataToWrite[i] = (byte)0x00;
    		    boolean success = false;
    		    int count = 0;
    		    do {
    		      success = Smart_IO.writeData(len_payload, dataToWrite);
    		    } while (!success && count < 20);
    		    if (!success) {
    		        // append("sendTestMsg KO \n");
    		        sendFailed++;
    		        cntReceived++;
    		    }
    	  }
    
          private void decodeData(String payloadStr) {
    		     String firstChar = payloadStr.substring(0, 2);
    		     // append("decodeData "+cntReceived+" \n");
    		     if (firstChar.equalsIgnoreCase("80")) {
    		         // append("decodeData "+cntReceived+"\n");
    		         // append("Success "+payloadStr+" \n");
    		         String lenPayloadStr = payloadStr.substring(2, 4);
    		         // append("lenPayloadStr "+lenPayloadStr+" \n");
    
    		         int lenPayload = Utilities.HexStringtoINT(lenPayloadStr);
    		         lenPayload = lenPayload*2; // bisogna moltiplicare per 2 il payload perche' ogni carattere Hex occupa due posizioni nella String
    
    		         // append("lenPayload "+lenPayload+" \n");
    
    		         int remoteLQI = Utilities.HexStringtoINT(payloadStr.substring(lenPayload, lenPayload+2));
    		         int remoteRSSI = Utilities.HexStringtoINT(payloadStr.substring(lenPayload+2, lenPayload+4));
    		         remoteRSSI = 256 - remoteRSSI; // complemento a 2
    		         int localLQI = Utilities.HexStringtoINT(payloadStr.substring(lenPayload+4, lenPayload+6));
    		         int localRSSI = Utilities.HexStringtoINT(payloadStr.substring(lenPayload+6, lenPayload+8));
    		         localRSSI = 256 - localRSSI;
    
    		         /* append("remoteLQI "+remoteLQI+" \n");
    		         append("remoteRSSI "+remoteRSSI+" \n");
    		         append("localLQI "+localLQI+" \n");
    		         append("localRSSI "+localRSSI+" \n"); */
    
    		         avgRemoteLQI = avgRemoteLQI + remoteLQI;
    		         avgRemoteRSSI = avgRemoteRSSI + remoteRSSI;
    		         avgLocalLQI = avgLocalLQI + localLQI;
    		         avgLocalRSSI = avgLocalRSSI + localRSSI;
    
    		         Smart_IO.resetPayloadHex();
    		     }
    		     else {
    		         // aggiorno il contatore dei messaggi persi
    		         // append("decodeData KO \n");
    		         noDataReceived++;
    		     }
    
    		}
    
    
    }
    
    E ho due problemi.

    1) In questa parte di codice:

    Codice:
    case MENU_QUIT: 
    		    	timerRead.cancel();
    				super.onDestroy();
    		    	return true; 
    
    mi aspetterei che la finestra dell'applicazione venisse chiusa ma cio' non accade.

    2) Le append chiamate nel metodo showData() a sua volta richiamato nel metodo run() di MyTaskRead non mi stampano a video quello che gli voglio far stampare.

    Dove sbaglio?

    Qualcuno sa darmi qualche dritta?

    Ciao e grazie
    Sandro
     
  2. blackgin

    blackgin Silver Droid

    Iscritto:
    29 Gen 2009
    Messaggi:
    3.462
    "Mi Piace":
    32
    Intanto ti rispondo alla 1).
    Puoi usare System.exit(0)
     
  3. ArconteOscuro

    ArconteOscuro Baby Droid

    Iscritto:
    31 Mag 2010
    Messaggi:
    9
    "Mi Piace":
    0