2013-07-31 4 views
1

저는 Arduino Uno Communicator라는 타사 앱을 사용하여 Android 직렬 태블릿에서 Arduino 보드로 데이터를 전송하는 앱을 만들고 있습니다. 뷰를 확장하는 DrawView라는 자바 파일이 있습니다. 이 클래스를 사용하여 본질적으로 경로를 그릴 수 있고, 경로에서 포인트를 모으고, 해당 포인트를 문자열에 넣은 다음 MainActivity에서 정적 메서드를 호출하고 해당 메서드에 문자열을 전달할 수 있습니다. 이 부분에 대한 내 코드는 다음과 같습니다 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 메소드에서 보낼 수 있다고 생각했지만 정적 메서드 여야하므로 할 수 없습니다. 그래서 지금과 같이 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); 

} 

문자열은 잘 보내드립니다.

+1

어떻게 작동하지 않는지 알고 계십니까? 다른 앱에서 브로드 캐스트 리시버를 어떻게 다루고 있습니까? –

+0

다른 앱의 소스 코드는 https://github.com/jeppsson/Arduino- Communicator를 참조하십시오. 나는이 방법을 사용하여 Arduino에 데이터를 보낼 수있었습니다. 이 방법으로 인 텐트를 브로드 캐스트하려고 할 때만 작동하지 않습니다. – Craig

답변

0

나는 그것을 알아 냈다.

String을 DrawView 클래스에서 MainActivity의 main 메서드로 전달하는 대신 DrawView에서 String을 반환하는 메서드를 호출하기로 결정했습니다. 패스를 그리는 작업을 끝내고 포인트가 모두 웨이 포인트 String에 추가되면 간단히 새로운 정적 String을 생성하고 반환했습니다. 내가 이것을 한 후에 Arduino는 보내진 모든 데이터를 받았다.

관련 문제