Android Bluetooth - обнаружение отключения от устройства

Я пытаюсь поймать фильтр намерений отключения устройства Bluetooth. Я добавил журнал в onReceive, но он никогда не достигает его и не отображается в logcat. Я подозреваю, что проблема в моей конфигурации manifest.xml:

проявляются:



    

    
    

    
        
            
                
                
                
                
            
        

        
        
    


MyReceiver расширяет BroadcastReceiver:

@Override
    public void onReceive(Context context, Intent intent) {
        Log.i("got-in", "got-in-");
        // String action = intent.getAction();
        BluetoothDevice device = intent
                .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

        Log.i("disconnect", device.getName());
        Intent i = new Intent(context, BTActivity.class);
        Bundle b = new Bundle();
        b.putString("deviceName", device.getName());
        intent.putExtras(b); // Put your id to your next Intent
        context.startActivity(i);
        // finish();

    }

Ответы на вопрос(4)

Попробуйте удалить из фильтра намерений и попробуйте снова.

 user152879431 окт. 2012 г., 15:49
Пробовал и это тоже, но опять же не входит в функцию обратного вызова onreceive. что мне не хватает? пожалуйста помоги!

Для новых пользователей. это будет работать. Ваш файл манифеста выглядит


            
                
                
            
        

и ваш приемник будет выглядеть

else if (intent.getAction().equals(`enter code here`
    BluetoothDevice.ACTION_ACL_DISCONNECTED)) {
    // connection lost

Попробуйте действие android.bluetooth.device.action.ACL_DISCONNECTED в фильтре намерений. Это должно решить вашу проблему.

 user152879430 окт. 2012 г., 23:29
Фактически даже "android.bluetooth.adapter.action.DISCOVERY_STARTED» не работает....
 user152879430 окт. 2012 г., 23:28
Нету. Это все то же самое. Я предполагаю, что мой манифест не является правильным. но я не уверен, в чем проблема.

Используйте этот код для получения разъединения (когда Bluetooth все еще включен):

 
    
    

Кроме того, вам необходимо зарегистрировать службу, которая затем регистрирует широковещательный приемник для изменения статуса Bluetooth, чтобы ваше приложение знало, когда Bluetooth был выключен, и, следовательно, отбрасывает все активные устройства, как вы выиграли.t получить ACL_DISCONNECT, когда Bluetooth просто выключен.

@Override
    public int onStartCommand(Intent intent, int flags, int startId) {

    IntentFilter filter = new IntentFilter();
    filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
    registerReceiver(bluetoothTurnedOnOff, filter);
    return START_STICKY;
}

private final BroadcastReceiver bluetoothTurnedOnOff = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1) == BluetoothAdapter.STATE_OFF) {
 [...]
 user152879401 нояб. 2012 г., 16:18
Почему я должен создать сервис? Достаточно ли того, чтобы в моем XML-файле манифеста был объявлен получатель и класс, расширяющий BroadcastReceiver? Разве этого не должно быть достаточно?
 Force01 нояб. 2012 г., 17:00
Вы должны создать сервис, потому что намерениеBluetoothAdapter.ACTION_STATE_CHANGED не может быть зарегистрирован через манифест, поэтому вы должны создать службу, которая регистрирует пользовательский приемник

Ваш ответ на вопрос