2013-09-24 3 views
0

У меня есть приложение, которое будет использовать 2 действия. Начальное или основное действие устанавливает соединение Bluetooth. Когда я переключаюсь на другое действие, я теряю соединение Bluetooth. Можно ли поддерживать Bluetooth-соединение при переключении? Вот OnResume() и onPause(). Когда я удаляю btSocket.close() в onPause, соединение maitained, но не будет связываться, когда onResume пытается подключиться.Умышленное назначение перенаправления

private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException { 
    if(Build.VERSION.SDK_INT >= 10){ 
     try { 
      final Method m = device.getClass().getMethod("createInsecureRfcommSocketToServiceRecord", new Class[] { UUID.class }); 
      return (BluetoothSocket) m.invoke(device, MY_UUID); 
     } catch (Exception e) { 
      Log.e(TAG, "Could not create Insecure RFComm Connection",e); 
     } 
    } 
    return device.createRfcommSocketToServiceRecord(MY_UUID); 
    } 

    @Override 
    public void onResume() { 
    super.onResume(); 

    Log.d(TAG, "...onResume - try connect..."); 

    BluetoothDevice device = btAdapter.getRemoteDevice(address); 


try { 
    btSocket = createBluetoothSocket(device); 
} catch (IOException e) { 
    errorExit("Fatal Error", "In onResume() and socket create failed: " + e.getMessage() + "."); 
} 

btAdapter.cancelDiscovery(); 

try { 
    btSocket.connect(); 
    Log.d(TAG, "....Connection ok..."); 
} catch (IOException e) { 
    try { 
    btSocket.close(); 
    } catch (IOException e2) { 
    errorExit("Fatal Error", "In onResume() and unable to close socket during connection failure" + e2.getMessage() + "."); 
    } 
} 

// Create a data stream so we can talk to server. 
Log.d(TAG, "...Create Socket..."); 

mConnectedThread = new ConnectedThread(btSocket); 
mConnectedThread.start(); 
} 

@Override 
public void onPause() { 
super.onPause(); 

Log.d(TAG, "...In onPause()..."); 

try  { 
    btSocket.close(); 
} catch (IOException e2) { 
    errorExit("Fatal Error", "In onPause() and failed to close socket." + e2.getMessage() + "."); 
} 
} 

ответ

0

Вы должны сделать свое подключение к Bluetooth независимо от ваших действий. Я бы предположил, что вы поместили весь свой код Bluetooth в класс «MyApp», полученный из класса Android Application, или в службу. Использование сервиса будет более сложным, но оно даст вам варианты для того, чтобы приложение работало даже после того, как пользователь закрыл действия, например. если вы хотите завершить связь с Bluetooth.

Вы найдете много написанных обо всех вариантах, поскольку они являются общими способами структурирования вашего приложения, особенно когда есть какая-то форма сетевого общения.

+0

Том, спасибо за отзыв. вот некоторая хорошая информация о сервисе http://www.vogella.com/articles/AndroidServices/article.html – Bobby

Смежные вопросы