如何从服务中的线程以特定间隔运行方法......?

时间:2013-03-05 02:13:11

标签: java android bluetooth android-service

我正在使用蓝牙聊天示例,我正在尝试从连接蓝牙设备时处于活动状态的线程以特定间隔发送“虚拟”数据。是否经常启动/停止其他服务来调用原始服务中的方法?我该如何实现呢?

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());
        }
    }
}

1 个答案:

答案 0 :(得分: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");
  }
}

了解更多信息see this