在我的应用程序中,我使用Janos Gyerik's BluetoothViewer代码通过蓝牙连接。
我还有一个TCPServer
类通过USB连接。
public void connectViaUSB() {
if (GlobalVariables.connectionstatus == 0) {
mTCPServer = new TCPServer(2222, getCurrentActivity());
mTCPServer.start();
mTCPServer.setResponseReceivedListener(this);
}
问题是,BluetoothViewer
被写为Activity
。需要启动活动才能连接,但是当我切换到另一个活动时,连接会丢失。
我需要始终保持该活动,或者找到修改它的方法。我该如何解决这种情况?
编辑
`
公共类MyService扩展了Service {
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:无法创建.MyService:NullPointerException
答案 0 :(得分:1)
尝试使用Service连接蓝牙。当您需要使用蓝牙时,只需拨打服务即可。这可以帮助您:http://www.vogella.com/articles/AndroidServices/article.html
答案 1 :(得分:0)
不确定这是否对您有所帮助,但我创建了一个由蓝牙控制的机器人。它使用在服务/线程内运行的连接。为此,我使用了以下两个类:
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);