1

Arduino Uno Communicatorというサードパーティアプリを使って、USBシリアル通信でAndroidタブレットからArduinoボードにデータを送るアプリを作っています。View を拡張する DrawView という Java ファイルがあります。このクラスを使用すると、基本的にパスを描画し、パスからポイントを収集し、それらのポイントを文字列に配置してから、MainActivity で静的メソッドを呼び出し、文字列をそのメソッドに渡すことができます。この部分の私のコードは次のようになります。

public class DrawView extends View 
  {
     MainActivity mActivity = new MainActivity();
     private String waypoints; 

     //declare variables here...

     public DrawView(Contex context, AttributeSet attrs) 
       {
         super(context, attrs); 

         //setup my paint, canvas and path here...

       }

     @Override
     public onDraw(Canvas canvas)
       {
         //draw canvas here...
       }

     public boolean onTouchEvent(MotionEvent event) 
       {
          //declare variables...

          switch(event.getAction())
            {
              case MotionEvent.ACTION_DOWN:

                //start adding to waypoints string...

                return true; 

              case MotionEvent.ACTION_MOVE:

                //add to waypoints
                break; 

              case MotionEvent.ACTION_UP:

                //pass string to static method called main in MainActivity
                mActivity.main(waypoints); 

                break; 

              default:
                return false; 
            }

            return true; 
          }

       }

文字列を MainActivity のメイン メソッドに渡した後、メイン メソッドは MainActivity 内の send という別のメソッドを呼び出します。以前はメインメソッドから送信できると思っていましたが、静的メソッドでなければならないのでできません。したがって、次のように MainActivity のインスタンスを作成して、非静的メソッドを呼び出します。

public class MainActivity extends Activity {

private final static String DATA_RECEIVED_INTENT =   "primavera.arduino.intent.action.DATA_RECEIVED";
private final static String SEND_DATA_INTENT = "primavera.arduino.intent.action.SEND_DATA";
private final static String DATA_EXTRA = "primavera.arduino.intent.extra.DATA";

DrawView drawView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    drawView = new DrawView(this, null);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_main); 

}

public static void main(String in) {

    MainActivity d = new MainActivity();
    d.send(in);
}

private void send(String in) {

    byte[] data = in.getBytes(); 
    Intent intent = new Intent(SEND_DATA_INTENT);
    intent.putExtra(DATA_EXTRA, data);
    sendBroadcast(intent);

}

}

すべてのメソッドが正しく呼び出されていることを確認しました。ウェイポイント文字列は正しいです。機能していないように見える唯一のことは、意図をブロードキャストすることです。DrawView ファイルでメイン メソッドが呼び出される部分にコメントを付けて、画面にボタンを配置し、ボタンに次のコードを配置すると、次のようになります。

public void buttonSend (View view) {

    byte[] data = "Hello".getBytes(); 
    Intent intent = new Intent(SEND_DATA_INTENT);
    intent.putExtra(DATA_EXTRA, data);
    sendBroadcast(intent);

}

文字列は問題なく送信されます。

4

1 に答える 1

0

私はそれを考え出した。

DrawView クラスから MainActivity のメイン メソッドに String を渡そうとする代わりに、呼び出されたときに String を返す DrawView のメソッドを正しくすることにしました。パスの描画が完了し、ポイントがすべてウェイポイント文字列に追加された後、新しい静的文字列を作成して返しました。これを行うと、Arduinoは送信されたすべてのデータを受信しました。

于 2013-07-31T14:04:26.057 に答える