часть-2 постоянная служба Android на ForeGround, которая запускается с помощью пользовательского интерфейса, работает и в спящем режиме, а также при перезагрузке телефона

Status: Действительно благодарен всекто помог и руководствуюсь здесь и в части-1!Я сделал код из исследований и помощи, оказанной ипоместил этот рабочий код в EDIT-1, Критика приветствуется, чтобы сделать код лучше.

Scenario:

Я задал вопрос упоминания в части 1, но по какой-то причине я могу настойчивоне может сделать дизайн а такжеправильная стратегия с кодом, который имеетистинная интеграция и здравомыслие.

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

Может быть, я некомпетентен или простонарушенный Чтение очень большого количества разрозненных документов и ответов по различным стратегиям, или ответы разных взглядов / стилей кодирования.

Часть-1часть-1 постоянная служба Android на ForeGround, которая запускается с помощью пользовательского интерфейса, также работает в спящем режиме, а также при перезагрузке телефона

Question:

Вот то, что я хотел и, наконец, пришел к выводу после наблюдения различных ответов:

Нужнозапускать код каждые 15 минут (четное когда телефонво сне). Потребуетсяпробуждение замков Я думаю?

            //AT boot, check shared preferences to see boolean "serviceEnabled"?
                    //if true, set alarm manager to run a service every 15 minuts.
                    //if false, do nothing.

            //On "enable" button clicked.
                    //make "serviceEnabled" boolean true in shared preferences.
                    //start alarm manager to run a service every 15 minuts.

            //on "Disable" button clicked.
                    //make "serviceEnabled" boolean false in shared preferences.
                    //stop alarm manager and deregister it to run ever.

Может кто-нибудь всесторонне сказать ... какой код я должен использовать ...? Я смиренно благодарен за головную боль исследования.

Requests:

Пожалуйста, отвечайте, только если вы уверенно и с опытом знаете, что делаете.

EDIT-1-Start:

Вот'Это то, что я сделал до сих пор. Пожалуйста, не стесняйтесь комментировать или критиковать.

Booter класс, который запускается при загрузке.

public class Booter extends BroadcastReceiver {

      public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
          Log.e("boot-status","BOOT_COMPLETED=================================================");
        //  SharedPreferences prefs = context.getSharedPreferences("$MYPACKAGE_preferences",0);
        //  if (prefs.getBoolean("startatboot",false)) {
        if(true){
        Intent updateIntent = new Intent();
        updateIntent.setClass(context, TheService.class);

        PendingIntent pendingIntent = PendingIntent.getService(context, 0, updateIntent, 0);
        AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, java.lang.System.currentTimeMillis()+5000,5000, pendingIntent);

        }
        }
      }


}

Сервисный класс

public class TheService extends Service{

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }
    PowerManager pm;
    PowerManager.WakeLock wl;
    @Override

      public int onStartCommand(Intent intent, int flags, int startId) {

        pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
        wl.acquire();


        startForeground(1, new Notification());

            ////// will do all my stuff here on in the method onStart() or onCreat()?

        Log.e("app-status","ping ====================================================");

        new Thread(new Runnable() {

            @Override
            public void run() {
                wl.release();
                stopSelf(); 
            }
        }).start();


        return START_STICKY;    
    }

    @Override
      public void onDestroy() {
        stop();
      }

    public void stop(){
        //if running
        // stop
        // make vars as false
        // do some stopping stuff
        stopForeground(true);


    }





}

Графический интерфейс для запуска / остановки

public class SettingsActivity extends Activity {
  // some code to initialize things

    buttonStop.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent updateIntent = new Intent();
        updateIntent.setClass(SettingsActivity.this, TheService.class);

        PendingIntent pendingIntent = PendingIntent.getService(SettingsActivity.this, 0, updateIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        AlarmManager alarmManager = (AlarmManager)SettingsActivity.this.getSystemService(Context.ALARM_SERVICE);
        alarmManager.cancel(pendingIntent);
        //make sharepred boolean as false

        }
    });

    buttonStart.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent updateIntent = new Intent();
        updateIntent.setClass(SettingsActivity.this, TheService.class);

        PendingIntent pendingIntent = PendingIntent.getService(SettingsActivity.this, 0, updateIntent, 0);
        AlarmManager alarmManager = (AlarmManager)SettingsActivity.this.getSystemService(Context.ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, java.lang.System.currentTimeMillis()+5000,5000, pendingIntent);
        //make shared prefs boolean as true

        }
    });

Menifiest

  
  

      

       // irrelevent here
              // my app uses these though in service class.
      
      

      
      
          
          

          
          
      
      
      

      
      
          
          
          
          
      

      

  

EDIT-1-END.

Ответы на вопрос(1)

Ваш ответ на вопрос