0

在我的应用程序中,我使用Janos Gyerik 的 BluetoothViewer代码通过蓝牙进行连接。

我还有一个TCPServer通过 USB 连接的类。

public void connectViaUSB() {
    if (GlobalVariables.connectionstatus == 0) {
        mTCPServer = new TCPServer(2222, getCurrentActivity());
        mTCPServer.start();
        mTCPServer.setResponseReceivedListener(this);
    }

问题是,BluetoothViewer写成Activity. 需要启动活动才能连接,但是当我切换到另一个活动时连接丢失。

我需要始终保持该活动,或者找到修改它的方法。我该如何解决这种情况?

编辑

`
公共类 MyService 扩展服务 {

private static final String TAG = "MyService";

@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();
    Log.d(TAG, "onCreate");

    BluetoothAdapter mAdapter = BluetoothAdapter.getDefaultAdapter();
    mAdapter.enable();

    BluetoothChatService mChatService = new BluetoothChatService(mHandler);
    BluetoothDevice device = BluetoothAdapter.getDefaultAdapter().getRemoteDevice("00:12:11:13:19:26");
    mChatService.connect(device);
}

@Override
public void onDestroy() {
    Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
    //stop thread
}

@Override
public void onStart(Intent intent, int startid) {
    Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
    Log.d(TAG, "onStart");
    //start thread (again)
}

}`

如何从该服务类建立蓝牙连接?它需要我移动 mHandler,我做到了。现在我得到 RuntimeException: Unable to create .MyService: NullPointerException

4

2 回答 2

1

尝试使用服务连接到蓝牙。当您需要使用蓝牙时,只需致电服务即可。这可以帮助你:http ://www.vogella.com/articles/AndroidServices/article.html

于 2013-02-21T15:40:59.510 回答
0

不确定这是否对您有所帮助,但我曾经创建了一个由蓝牙控制的机器人。它使用在服务/线程内运行的连接。为此,我使用了以下 2 个类:

BluetoothSerialService.java

DeviceListActivity.java

只需用谷歌搜索这两个课程,您就会找到托管它们的地方。像这儿。 http://code.google.com/p/bluetooth-remote-control/source/browse/trunk/src/pro/apus/blueremote/?r=2

要实际设置连接,只需将类似这样的内容绑定到按钮即可。

public void autoconnect() {

        t = new TextView(this);
        t = (TextView) findViewById(R.id.connecttext);
        mSerialService = new BluetoothSerialService(this, mHandlerBT, t);
        if (mSerialService.getState() == BluetoothSerialService.STATE_NONE) {
            BluetoothDevice device = BluetoothAdapter.getDefaultAdapter()
                    .getRemoteDevice(mMacAddress);
            mSerialService.connect(device);
        } else if (mSerialService.getState() == BluetoothSerialService.STATE_CONNECTED) {
            setProgressBarIndeterminateVisibility(false);
            mSerialService.stop();
            mSerialService.start();
        }
    }

并确保在这样做之前征求许可。

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter
                .getDefaultAdapter();
        askBluetoothPermission(mBluetoothAdapter);
于 2013-02-21T15:37:30.797 回答