2017-01-18 1 views
0

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

 Intent intent = new Intent(MyActivity.this,TestReceiverService.class); 
     startService(intent); 

TestReceiverService.class

public class TestReceiverService extends Service { 
@Override 
public void onStart(Intent intent, int startId) { 
    super.onStart(intent, startId); 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    registerTestReceiver(); 
} 


private void registerTestReceiver() { 

    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED); 
    registerReceiver(mTestReceiver, intentFilter); 
} 

@Nullable 
@Override 
public IBinder onBind(Intent intent) { 

    return null; 
} 

public BroadcastReceiver mTestReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, "Event triggered--------", Toast.LENGTH_SHORT).show(); 
    } 
};} 

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

Заранее спасибо.

+0

OnCreate будет звоните только один раз, поэтому он будет выполняться один раз .. всякий раз, когда любой клиент вызывает startService() или bindService(), тогда служба вернет доступное связующее, что означает, что следующий раз больше не будет выполняться onCreate() снова, поэтому для вашего случая этот тост отобразился только один раз –

+0

Вы добавили свою услугу в свой androidmanifest.xml? –

ответ

2

Если вы хотите сделать это только один раз, то ваша логика в порядке.

onCreate будет звонить только один раз, поэтому он будет выполняться один раз. Всякий раз, когда любой клиент вызывает startService() или bindService(), тогда эта услуга вернет доступное связующее и вызовет обратный вызов onServiceConnected().

Это означает, что в следующий раз он не будет выполнять onCreate(), поэтому для вашего случая это toast отобразилось только один раз.

Так onStartCommand() или onBind() будет звонить непосредственно всякий раз, когда пользователь пытается вызвать startService() или bindService().

Или, если вы хотите, чтобы отобразить тост всякий раз, когда вы подключаетесь с обслуживанием, то вы должны сделать что-либо в onStart() или onBind()

+0

Я даже не получаю тост за по крайней мере один раз. Я уже пробовал использовать onStart(). не имеет никакого значения –

+0

Я не уверен, что вы подразумеваете под его именем только один раз ... он вызывается всякий раз, когда экземпляр службы не существует, т.е. 'onDestroy' был вызван https://developer.android.com/guide /components/services.html#LifecycleCallbacks – Ryan

+0

абсолютно, то есть внутренний смысл .. если onDestroy() называется означает определенность onCreate() вызовет .. supose onStartCommand выполнено, что не означает, что onDestroy() скоро вызовет вызов. Если мы привязываем услугу, то onDestroy() вызывается, когда все клиенты удаляют его соединение с сервисом. –

0

Я думаю, это потому, что у вас есть неправильный контекст, попробуйте использовать getApplicationContext()

+0

извините. он не работает –

+0

Спасибо за ваше время @Ryan –

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