我正在开发一款应用程序,该应用程序使用名为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);
}
该字符串将发送正常。
答案 0 :(得分:0)
我明白了。
我没有尝试将String中的String从DrawView类传递给MainActivity中的main方法,而是决定在DrawView中使用一个方法,当调用它时会返回一个String。在我完成绘制路径并将点全部添加到路径点String后,我只是创建了一个新的静态String并返回它。一旦我这样做,Arduino就收到了所有发送的数据。