从一个应用程序广播Intent到另一个应用程序

时间:2013-07-31 01:36:34

标签: java android android-intent

我正在开发一款应用程序,该应用程序使用名为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);

}

该字符串将发送正常。

1 个答案:

答案 0 :(得分:0)

我明白了。

我没有尝试将String中的String从DrawView类传递给MainActivity中的main方法,而是决定在DrawView中使用一个方法,当调用它时会返回一个String。在我完成绘制路径并将点全部添加到路径点String后,我只是创建了一个新的静态String并返回它。一旦我这样做,Arduino就收到了所有发送的数据。