2011-01-21 2 views
0

Я создал службу, которая должна получать события android.bluetooth.device.action.ACL_DISCONNECTED/ACL_CONNECTED.Служба всегда будет получать действие Broadcast, зарегистрированное для?

Я знаю, что службы в android могут быть перезапущены/остановлены, когда решит android.

Тем не менее, мне интересно, всегда ли гарантируется получение услуг для зарегистрированных событий, даже если они были убиты андроидом?

Я предполагаю, что это означает, что андроид должен будет перезапустить убитую службу, которая зарегистрировалась для прослушивания событий, когда это событие имеет место. Правильно ли это предположение?


Большое спасибо за быстрый ответ.

Позволь мне дать больше информации, образец кода следующим образом:

public class my_service extends Service { 

    @Override  
    public int onStartCommand(Intent intent, int flags, int startId) { 
     ... 
     IntentFilter filterDisconnected = new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECTED); 
this.registerReceiver(mReceiverDisconnected, filterDisconnected); 
     ... 
    } 


    private final BroadcastReceiver mReceiverDisconnected = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      ... 
     } 
    } 

    ... 
} 

Так что с этим кодом BroadcastReceiver реализован в классе обслуживания.

Этот код работает нормально при нормальных условиях, но вы говорите, что это не правильно, и нужен другой класс (BroadcastReceiver)?

Если это правильно, я задаюсь вопросом, остановлен ли этот класс обслуживания по какой-либо причине, когда соответствующее событие будет поднято, класс будет перезапущен, и BroadcastReceiver получит событие.

+0

Вы создали новую незарегистрированную учетную запись (я объединил ее в эту), пожалуйста, подумайте о регистрации, чтобы этого больше не повторилось. Кроме того, ответы отвечают за ответы, а не за обновления. Благодарю. – Will

ответ

4

Привет всем, я создал службу, которая должна получать события android.bluetooth.device.action.ACL_DISCONNECTED/ACL_CONNECTED.

Это не должно быть возможно. Они документируются как транслируемые действия; если это правда, то их можно подобрать только BroadcastReceiver.

Однако, мне интересно, всегда ли гарантируется получение услуг для зарегистрированных событий, даже если они были убиты андроидом?

Опять же, услуги никогда не должны «получать» эти события напрямую.

Однако, если вы создаете BroadcastReceiver и поместить его в манифесте с <intent-filter> для получения требуемых передач, то, что BroadcastReceiver будет «гарантированно получать события, которые зарегистрированы для», и что BroadcastReceiver можно назвать startService() послать команду до IntentService при желании.