1

我正在使用蓝牙聊天示例,并且尝试从连接蓝牙设备时处于活动状态的线程以特定间隔发送“虚拟”数据。每隔一段时间启动/停止另一个服务以调用原始服务中的方法是个好主意吗?我将如何实现这一点?

private class ConnectedThread extends Thread {

    static private final String TAG = "PhoneInfoConnectedThread";
    private final BluetoothSocket mmSocket;
    private final InputStream mmInStream;
    private final OutputStream mmOutStream;

    public ConnectedThread(BluetoothSocket socket, String socketType) {
        mmSocket = socket;
        InputStream tmpIn = null;
        OutputStream tmpOut = null;

        // Get the BluetoothSocket input and output streams
        try {
            tmpIn = socket.getInputStream();
            tmpOut = socket.getOutputStream();
            Log.d(TAG, "In and out streams created");
        } catch (IOException e) {
            Log.e(TAG, "temp sockets not created " + e.getMessage());
        }

        mmInStream = tmpIn;
        mmOutStream = tmpOut;
    }

    // this is where we will spend out time when connected to the accessory.
    public void run() {
        // Keep listening to the InputStream while connected
        while (true) {
            // do whatever
        }
    }

    // Write to the connected OutStream.
    public void write(byte[] buffer) {
        if (mmOutStream == null) {
            Log.e(TAG, "ConnectedThread.write: no OutStream");
            return;
        }
        try {
            Log.d(TAG, "ConnectedThread.write: writing " + buffer.length
                    + " bytes");
            mmOutStream.write(buffer);

            // Share the sent message back to the UI Activity
            // mHandler.obtainMessage(PhoneInfoActivity.MESSAGE_WRITE, -1,
            // -1, buffer).sendToTarget();
            Log.d(TAG, "ConnectedThread.write: sent to calling activity");
        } catch (IOException e) {
            Log.e(TAG, "Exception during write" + e.getMessage());
        }
    }

    public void cancel() {
        try {
            Log.d(TAG, "ConnectedThread.cancel: closing socket");
            if (mmSocket != null)
                mmSocket.close();
        } catch (IOException e) {
            Log.e(TAG, "ConnectedThread.cancel: socket.close() failed"
                    + e.getMessage());
        }
    }
}
4

1 回答 1

1

愿这个例子对你有所帮助。

 MyTimerTask myTask = new MyTimerTask();
 Timer myTimer = new Timer();
 myTimer.schedule(myTask, 2000, 1000);


class MyTimerTask extends TimerTask {
  public void run() {
     Log.v("TAG","Message");
  }
}

有关更多信息,请参阅此

于 2013-03-05T04:46:28.493 回答