定期任务(通过蓝牙发送的消息)

时间:2017-10-17 14:51:49

标签: android bluetooth message cyclic

在我的移动机器人项目中,有2个伺服电机在两个平面上旋转相机我想通过旋转智能手机在我的Android应用程序中控制它们(通过读取偏航/俯仰/从智能手机辅助计量器滚动)。

为此,我必须通过蓝牙向Arduino发送有关这三个角度的数据。例如,示例数据包如下所示:

  

“Y:100,P:20,R:45”   其中[Y-yaw,P-pitch,R-roll]。

负责将此命令/消息发送给Arduino的代码 - > function PopAccount() { //get Account GUID var AccountGUID = Xrm.Page.data.entity.attributes.get("accountid").getValue()[0].id; if (AccountGUID != null) { //open Account form Xrm.Utility.openEntityForm("account", AccountGUID) } }

我希望此消息每200毫秒循环发送一次(当我在此活动中时) - > (现在每次按下“发送”按钮时都会发送:D被点击)。

我还必须提一下,除了这条消息给Arduino应用程序发送另一条消息,当我在同一个活动中触摸虚拟操纵杆来控制我的移动机器人的方向时,我希望在发送这两个消息之间没有冲突)

那我怎么能得到它?一些示例代码?

这是来自Android Studio的代码(关于此活动):

bl.sendData("A:"+String.format("%.0f",azimut) + ",P:" + String.format("%.0f",pitch) + ",R:" + String.format("%.0f",roll) + ".");

1 个答案:

答案 0 :(得分:0)

@jdv谢谢你现在的帮助我知道怎么做 - >

    public class MainActivity extends Activity implements SensorEventListener {

    private Handler handler
    ...

    protected void onCreate(Bundle savedInstanceState) {  
    handler = new Handler();     
    ...
    }

    Runnable mStatusChecker = new Runnable() {
        @Override
        public void run() {
            try {
                bl.sendData("A:"+i+String.format("%.0f",azimut) + ",P:" + String.format("%.0f",pitch) + ",R:" + String.format("%.0f",roll) + ".");; //this function can change value of mInterval.
            } finally {
                // 100% guarantee that this always happens, even if
                // your update method throws an exception
                handler.postDelayed(mStatusChecker, 1000);
            }


        }
    };

    void startRepeatingTask() {
        mStatusChecker.run();
    }

    void stopRepeatingTask() {
        mHandler.removeCallbacks(mStatusChecker);
    }

     private final Handler mHandler =  new Handler() {
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
                case cBluetooth.BL_OK:
                    startRepeatingTask();
                    Toast.makeText(getBaseContext(), "BL_OK", 
                    Toast.LENGTH_SHORT).show();
                    break;
                              }
              }
}

所以当连接蓝牙时我会调用函数startRepeatingTask();,因为否则会弹出错误。

但现在我还有另一个问题,我不想创建新主题,所以当我按下我的智能手机主页按钮和后退按钮时,你能告诉我哪个功能是通话吗?

onResume在两种情况下或者在HOME中有另一种功能吗?