Даже если приложение закрыто (убито)
Я хочу, чтобы эта служба запускалась, даже если приложение закрыто (kiiled) или даже если пользователь не запускает приложение.
Я хочу, чтобы сервис запускался после того, как приложение установлено, и с этого момента служба должна работать всегда.
public class notifications extends Service {
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
}
@Override
public void onStart(Intent intent, int startId) {
final Handler handler = new Handler();
final Runnable runb = new Runnable()
{
public void run()
{
Toast.makeText(getApplicationContext(), " Service Started", Toast.LENGTH_LONG).show();
handler.postDelayed(this, 10000);
}
};
handler.postDelayed(runb, 0);
}
@Override
public void onDestroy() {
}
}*/
public class notifications extends IntentService
{
private Timer mBackGroundTimer;
public notifications()
{
super("myservice");
this.mBackGroundTimer=new Timer();
}
@Override
protected void onHandleIntent(Intent intent)
{
// TODO Auto-generated method stub
mBackGroundTimer.schedule(new TimerTask()
{
public void run()
{
try
{
Notification("This is message from Dipak Keshariya (Android Application Developer)", "This is Android Notification Message");
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
},1000, 2000);
} // END onHandleIntent()
private void mStopTimer()
{
//Call this whenever you need to stop the service
mBackGroundTimer.cancel();
}
private void Notification(String notificationTitle, String notificationMessage) {
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
android.app.Notification notification = new android.app.Notification(R.drawable.ic_launcher, "A New Message from Dipak Keshariya (Android Developer)!",
System.currentTimeMillis());
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(getApplicationContext(), notificationTitle, notificationMessage, pendingIntent);
notificationManager.notify(10001, notification);
}
}
как я могу это сделать?
Ответы
Ответ 1
Посмотрев на свой код, вы хотите, чтобы ваша служба периодически выдавала уведомления.
Что касается того, что он работает постоянно, имейте в виду, что по дизайну система Android может в любой момент прекратить ваш процесс обслуживания. Вы можете немного повлиять на это, но вы не можете помешать системе убить вашу службу.
Итак, для ваших периодических действий было бы лучше использовать AlarmManager с повторяющимся сигналом тревоги. Тогда ваш сервис будет в основном однократным, то есть выполнить одно действие, а затем выйти.
Для некоторого кода смотрите здесь, например:
Android: диспетчер аварийных сигналов
Ответ 2
Вам необходимо реализовать метод OnStartCommand класса Service и в нем вернуть Service.START_STICKY. Это сделает трюк. Если вы убьете приложение, служба будет продолжать работать в фоновом режиме. Однако, если вы перезагрузите свой телефон, я думаю, вам нужно реализовать что-то еще в своем приложении, а также службу загрузки или что-то в этом роде.
Ответ 3
Поскольку вам необходимо запустить службу в фоновом режиме. вы находитесь на правильном пути, чтобы использовать эту услугу, потому что это предназначено только для фоновой работы.
из activitiy вы можете запустить сервис
startService(new Intent(activityName.this, serviceName.class));
или если ваше приложение не имеет какой-либо активности, вы можете сделать службу по умолчанию и основным средством запуска приложения, поставив
<service android:name="name of the service" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</service>
Ответ 4
Я думаю, что ответ на этот вопрос таков: https://developer.android.com/training/sync-adapters/creating-sync-adapter.html
Адаптеры синхронизации, введенные в Google I/O 2013.