2013-10-03 5 views
0

У меня возникла проблема с тем, что я запускаю услугу с помощью Intent в регистре onCreate()BroadcastReceiver, а затем в отменил регистрацию BroadcastReceiver. В методе onHandleIntent() Я запускаю открытие для устройств Bluetooth. Проблема в том, что я мой BroadcastReceiver уничтожен до того, как обнаружено какое-либо устройство, поэтому я не могу ничего сделать с намерением BluetoothDevice.ACTION_FOUND. Я попытался переместить startDiscovery() на onCreate(), но результаты не найдены. Мой код выглядит следующим образом:Метод Android-сервиса onDestroy вызван до завершения сканирования Bluetooth

public class BluetoothService extends IntentService{ 

private BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter(); 
private final String SMART_TOKEN_ADDRESS = "F0:E7:7E:5F:63:70"; 
private final BroadcastReceiver receiver = new BroadcastReceiver(){ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     Log.v("BLUETOOTH","found it!"); 
    } 

}; 

public BluetoothService() { 
    super("BluetoothService"); 
    // TODO Auto-generated constructor stub 
} 

@Override 
public void onCreate(){ 
    super.onCreate(); 
    Log.v("SERVICE", "Just got created"); 
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
    registerReceiver(receiver, filter); 
    btAdapter.startDiscovery(); 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
    // TODO Auto-generated method stub 
    Log.v("BLUETOOTH", "Discovery just started"); 
    //btAdapter.startDiscovery(); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    Log.v("BLUETOOTH","Just got destroyed!"); 
    unregisterReceiver(receiver);   
} 

}

Лог выглядит следующим образом: 1. Просто получил создано 2. Открытие только начал 3. Просто получил уничтожены! 4. Получено android.bluetooth.device.action.FOUND

Спасибо за помощь! T.

ответ

0

Это происходит потому, что после обработки всех запросов служба останавливается. Из документации: «Остановка службы после того, как все запросы запуска были обработаны, поэтому вам никогда не нужно называть stopSelf()».

Итак, вы должны использовать команду wait или другую, чтобы сообщить рабочему потоку ждать выполнения, если вы хотите использовать службу.

См. Документацию об услугах: http://developer.android.com/guide/components/services.html

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