我正在制作一个应用程序,它使用名为 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);
}
字符串会发送得很好。