Я знаю, что могу использовать постоянное уведомление, чтобы сохранить работоспособность службы, но у меня есть служба, в которой есть широковещательный приемник. Я не хочу использовать уведомление, чтобы просто держать радиопередатчик. Я также знаю, что могу зарегистрировать свой приемник в манифесте моего приложения, но я хочу, чтобы пользователь мог контролировать, активен ли приемник или нет.Как сохранить сервис без постоянного уведомления
Вот сервис, который продолжает перезагружать.
public class DockServiceListener extends Service{
IntentFilter filter;
BroadcastReceiver mReceiver;
public void onCreate() {
super.onCreate();
Toast.makeText(getApplicationContext(), "Receiver started!", Toast.LENGTH_SHOR
filter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
mReceiver = new DockReceiver();
}
public int onStartCommand(Intent intent, int flags, int id) {
super.onStartCommand(intent, START_STICKY, id);
registerReceiver(mReceiver, filter);
return id;
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
Очень простой. Я также знаю, что это может быть андроид, но как скоро Facebook Messenger и другой сервис не будут закрыты? Разве я просто не знаю, потому что у него нет тоста? Или есть способ только запустить onCreate один раз?
Ну так или иначе, спасибо всем за то, что искали! Надеюсь, кто-то может лучше просветить меня! :)
EDIT: Новый метод, интересно, правильно ли это?
startBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
PackageManager pm = getApplicationContext().getPackageManager();
ComponentName dockReceiver = new ComponentName(getApplicationContext(), DockReceiver.class);
pm.setComponentEnabledSetting(dockReceiver, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
finish();
}
});
stopBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
PackageManager pm = getApplicationContext().getPackageManager();
ComponentName dockReceiver = new ComponentName(getApplicationContext(), DockReceiver.class);
pm.setComponentEnabledSetting(dockReceiver, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
finish();
}
});
Я отредактировал мой вопрос, является ли новое редактирование правильным способом? Кажется, это работает. Я активировал его внутри моего манифеста, и, похоже, он работает с кнопками. Просто интересно, правилен ли мой синтаксис и местоположение. Я изменил «0» на «-1», и он выглядит более плавным. – Seth
@Seth: Вы можете избавиться от 'getApplicationContext()', где бы вы его ни увидели. И я понятия не имею, нужно ли 'finish()' или нет, в зависимости от того, что вы пытаетесь сделать. – CommonsWare
Я нахожу 'finish()' на кнопке, поэтому пользователю не нужно вручную нажимать кнопку «Назад» или кнопку «домой», чтобы оставить свою активность. Просто попробуйте удалить ненужный шаг для пользователя. И это ошибка, когда я удаляю 'getApplicationContext()', поскольку нет аргумента Context. Это то, что eclipse говорит «ComponentName (Context,)», он работает, когда я включаю 'getApplicationContext()' есть ли что-то другое, которое я должен использовать вместо этого? –
Seth