Господа! Прошу помощи!
много примеров уже смотрел и никак не пойму: как же мне, все-таки, сделать на android сервис, который после закрытия фактического приложения - не умрет? явный пример того что я хочу - яндекс.музыка. Качаете яндекс.музыку, запускаете, выбираете трек и слушаете. Потом выходите из приложения, открываете просмотр всех запущенных приложений и убиваете их все. а музыке хоть бы что!
вот какой я нашел пример и он все равно не работает
public class UnKilledService extends Service {
final String LOG_TAG = "myLogs";
public void onCreate() {
super.onCreate();
Log.d(LOG_TAG, "MyService onCreate");
}
public void onDestroy() {
super.onDestroy();
Log.d(LOG_TAG, "MyService onDestroy");
}
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(LOG_TAG, "MyService onStartCommand, FLAG: "+flags);
//readFlags(flags);
return START_NOT_STICKY;
}
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onTaskRemoved(Intent rootIntent) {
Log.d(LOG_TAG, "MyService onTaskRemoved");
}
}
в фоне - работает. убиваю приложение - не работает.
Как это сделать? прошу, пожалуйста, помочь действительным советом, а не вопросами "да зачем? а там глядел? и т.д."
так же, хотелось бы не ответ типа
попадалась где-то тема, что в новых android версиях такой сервис будет иметь и обязательное уведомление в нотификациях - это даже хорошо, если найдется именно такой пример!
спасибо всем ответившим.
К сожалению единого, точного рецепта здесь нет, к тому же это считается антипаттерном и именно поэтому начиная с версии 4.3 ось будет добавлять автоматическую нотификацию о запущенном "неубиваемом" сервисе.
Есть комплекс мероприятий, который в итоге (в зависимости от версии) может привести к успеху:
Service
в манифесте в поименованном процессе: android:process="name"
Service
не в фоне, то есть указать startForeground()
- с недавних пор эта опция объявлена как deprecated
Service
с флагом START_REDELIVER_INTENT
- в этом случае при убивании приложения сервис будет поднят заново (если стартовал до этого)Попробуйте действительно с уведомлением сервис. Для этого в сервисе есть метод startForeground()
Добавьте и вызовите этот метод в сервисе:
private final static int NOTIFICATION_ID = 42;
private void runAsForeground(){
//Intent notificationIntent = new Intent(this, RecorderMainActivity.class);
//PendingIntent pendingIntent=PendingIntent.getActivity(this, 0,
//notificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
Notification notification=new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentText(getString(R.string.isRecording))
//.setContentIntent(pendingIntent)
.build();
startForeground(NOTIFICATION_ID, notification);
}
Спасибо всем откликнувшимся! Решил вопрос путем добавления startForeground() итог - именно тот, который мне был нужен!
Виртуальный выделенный сервер (VDS) становится отличным выбором
IntellIJ IDEA JSP не видит объекты, которые я передаю из контроллера
Только начинаю вникать в jms и vaadin так что не судите строго за нубский вопросЕсть простой пример jms чат https://github