1

我正在制作一个应用程序,它使用名为 Arduino Uno Communicator 的第三方应用程序使用 USB 串行通信将数据从 Android 平板电脑发送到 Arduino 板。我有一个名为 DrawView 的 java 文件,它扩展了 View。使用这个类,我基本上可以绘制一条路径,从路径中收集点,将这些点放在一个字符串中,然后在我的 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 中的 main 方法后,main 方法将调用 MainActivity 中另一个名为 send 的方法。以前我以为我可以从 main 方法发送,但我不能,因为它必须是静态方法。所以现在我通过创建一个 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 文件中注释了调用 main 方法的部分,并且我在屏幕上放置了一个按钮,并为该按钮放置了以下代码:

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 类中的 String 传递给 MainActivity 中的 main 方法,而是决定在 DrawView 中纠正一个方法,该方法在调用时会返回一个 String。在我完成绘制路径并将点都添加到航点字符串后,我只需创建一个新的静态字符串并返回它。一旦我这样做了,Arduino 就会收到所有发送的数据。

于 2013-07-31T14:04:26.057 回答