Android(Java) + NXT: iCommand-Methode funktioniert nicht?!

Mindstorms und Delphi, Basic...
Läuft etwas nicht? für den NXT

Moderator: Moderatoren

memolin
Neuer Schreiber
Neuer Schreiber
Beiträge: 1
Registriert: 22. Dez 2014 15:53

Android(Java) + NXT: iCommand-Methode funktioniert nicht?!

Beitragvon memolin » 22. Dez 2014 18:08

Hallo,
Seit geraumer Zeit versuche ich mich an einem Problem, zu der ich immernoch keine Lösung gefunden und mich jetzt voller Verzweiflung meiner elendigen Programmierkünste und einem Funken Zuversicht an euch wende.

Ich habe ein NXJ-Programm erfolgreich mit Eclipse auf meinen NXT-Brick geflasht. Um den NXT-Brick per Bluetooth mit meinem Handy zu steuern, habe ich ein Android-Projekt importiert und erfolgreich auf meinem Handy gestartet und ausgeführt.

Mein Problem ist nun, dass ich zum importierten Projekt nun ein Button hinzugefügt habe, mit dem ich das NXJ-Programm, welches auf dem Brick ist, starten möchte. Das versuche ich, indem ich vom iCommand-Package die Methode startProgram(„File.nxj“) benutze. Leider stürzt beim Betätigen des Buttons die App ab und im LogCat kommt u.a. die Fehlermeldung „ClassNotFoundException“ für das iCommand-Package, und das, obwohl ich jar-Datei eingefügt und importiert habe.

Hier Teile des Codes:

Code: Alles auswählen

import icommand.nxt.FileSystem;

  public void automaticDriveStart()
  {     
       FileSystem.startProgram("FL.nxj");
  }




[b]//Button (Layout)[/b]
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.Display;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.widget.*;

   private ImageButton btnAutomatic;
        final static int btnAutoId = Menu.FIRST + 55;   

          btnAutomatic = new ImageButton(this);
          btnAutomatic.setId(btnAutoId);
          btnAutomatic.setImageResource(R.drawable.icon);
          RelativeLayout.LayoutParams btnAutoParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
          btnAutoParams.addRule(RelativeLayout.CENTER_IN_PARENT);
         
          btnAutomatic.setLayoutParams(btnAutoParams);
          controlLayout.addView(btnAutomatic);



[b]//Button-activity, I want that my program on the nxt starts, when I click the button once[/b]
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.Display;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.widget.*;

btnAutomatic.setOnTouchListener(automaticOnTouchListener);

public OnTouchListener automaticOnTouchListener = new OnTouchListener(){
      @Override
      public boolean onTouch(View v, MotionEvent event)
      {
         if(event.getAction() == MotionEvent.ACTION_UP){
         Main.remoteNxt.automaticDriveStart();
         return true;     
      }
      return false;
   }
   
   };


Von der FileSystem Klasse:

Code: Alles auswählen

public class NXTCommand implements NXTProtocol {
   
   private static NXTCommand singleton = new NXTCommand();
   
   private NXTComm nxtComm;
   
   private static boolean verifyCommand = false;
   
   // Ensure no one tries to instantiate this.
   private NXTCommand() {}
   
   /**
    * Starts a program already on the NXT.
    * UNTESTED
    * @param fileName
    * @return
    */
   public byte startProgram(String fileName) {
      byte [] request = {DIRECT_COMMAND_NOREPLY, START_PROGRAM};
      request = appendString(request, fileName);
      return sendRequest(request);
   }

   /**
    * Helper code to append a string and null terminator at the end of a command request.
    * Should use String.concat if I could add a zero to end somehow.
    * @param command
    * @param str
    * @return
    */
   private byte[] appendString(byte [] command, String str) {
      String requestStr = new String(command);
      StringBuffer buff = new StringBuffer(requestStr);
      buff.append(str);
      // buff.append(0x00); // Need to add 0 to end of command array.
      buff.setLength(buff.length() + 1); // This is a hack to add null value to end
      return buff.toString().getBytes();
   }

/**
    * Small helper method to send request to NXT and return verification result.
    * @param request
    * @return
    */
   private byte sendRequest(byte [] request) {
      byte verify = 0; // default of 0 means success
      if(verifyCommand)
         request[0] = DIRECT_COMMAND_REPLY;
     
      nxtComm.sendData(request);
      if(verifyCommand) {
         byte [] reply = nxtComm.readData();
         verify = reply[2];
      }
      return verify;
   }


von der NXTComm Klasse:

Code: Alles auswählen

package icommand.nxt.comm;

interface NXTComm {
   
   public static final String TYPE_RXTX = "rxtx";
   
   public static final String TYPE_BLUEZ = "bluez";
   
   public static final String TYPE_BLUECOVE = "bluecove";
   
   public static final String TYPE_SUN = "sun";
   
   public void open() throws Exception;

   public void sendData(byte[] request);

   public byte[] readData();
   
   public void close();

}


Ich hoffe, ihr könnt damit was anfangen und bedanke mich jetzt schon recht herzlich für die Antwort(en) :danke:

Zurück zu „sonstige Software und Software-Probleme“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 13 Gäste

Lego Mindstorms EV3, NXT und RCX Forum : Haftungsauschluss