Даже если приложение закрыто (убито)

Я хочу, чтобы эта служба запускалась, даже если приложение закрыто (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>