0

我知道這個問題有很多問題,我幾乎看到所有問題,但我無法解決我的問題。我有一個使用本地廣播管理器調用主要活動的服務,我從該服務獲得一些價值,然後將它們放入字符串併發送到需要使用它們的其他服務。這些服務之一被稱爲本地廣播,但其中兩個在按鈕監聽器中,我使用警報管理器每隔1分鐘重複運行它們,同時我在第一個服務中使用satrtforeground()調用主要活動,但在某些設備中奇怪地使用設備屏幕下車或用戶從後臺(從堆棧)清除應用程序不起作用。我希望你能幫助我,謝謝當應用程序完全關閉時,我的服務不工作

public class ServiceURL extends Service { 


public static final String Service = ServiceURL.class.getName() + "LocationBroadcast"; 




@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

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


    Notification note = new Notification(0, null, System.currentTimeMillis()); 
    note.flags |= Notification.FLAG_NO_CLEAR; 
    startForeground(42, note); 


    // some codee 

     Intent i = new Intent(Service); 
     i.putExtra("Sobh",prayerTimes.get(0).toString()); 
     i.putExtra("Sunrise",prayerTimes.get(1).toString()); 
     i.putExtra("Zohr",prayerTimes.get(2).toString()); 
     i.putExtra("Asr",prayerTimes.get(3).toString()); 
     i.putExtra("Sunset",prayerTimes.get(4).toString()); 
     i.putExtra("Maghreb",prayerTimes.get(5).toString()); 
     i.putExtra("Isha",prayerTimes.get(6).toString()); 

     sendBroadcastMessage(i); 



    return START_STICKY; 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
} 
@Override 
public void onCreate() { 
    super.onCreate(); 

} 

private void sendBroadcastMessage(Intent intent) { 

     LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 
} 


} 

MainActivity.java

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

// some code 
      LocalBroadcastManager.getInstance(this).registerReceiver(
        new BroadcastReceiver() { 
         @Override 
         public void onReceive(Context context, Intent intent) { 



          Sobh = intent.getStringExtra("Sobh"); 
          Sunrise = intent.getStringExtra("Sunrise"); 
          Zohr = intent.getStringExtra("Zohr"); 
          Sunset = intent.getStringExtra("Sunset"); 
          Maghreb = intent.getStringExtra("Maghreb"); 
          Asr = intent.getStringExtra("Asr"); 
          Isha = intent.getStringExtra("Isha"); 

          Log.d("Sobh in main", Sobh); 

           Intent i = new Intent(getApplicationContext(), ServiceAzan.class); 

           i.putExtra("SOBH", Sobh.substring(0, 5)); 
           i.putExtra("ZOHR", Zohr.substring(0, 5)); 
           i.putExtra("MAGHREB", Maghreb.substring(0, 5)); 
           i.putExtra("ASR", Asr.substring(0, 5)); 
           i.putExtra("ISHA", Isha.substring(0, 5)); 
           PendingIntent pintent = PendingIntent.getService(getApplicationContext(), 0, i, 0); 
           AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
           alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),60 * 1000, pintent); 
           // String timestamp = intent.getStringExtra("Date"); 

          SobhText.setText(Sobh.substring(0, 5)); 
          SunriseText.setText(Sunrise.substring(0, 5)); 
          ZohrText.setText(Zohr.substring(0, 5)); 
          SunsetText.setText(Sunset.substring(0, 5)); 
          MaghrebText.setText(Maghreb.substring(0, 5)); 
          AsrText.setText(Asr.substring(0, 5)); 
          IshaText.setText(Isha.substring(0, 5)); 

          Log.d("sobh text .....", SobhText.getText().toString()); 


          Log.d("change value before",beforepick+""); 
          Log.d("change value after",afterpick+""); 

          TimeChanging.setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 

             // some code 

              Intent intentBA = new Intent(getApplicationContext(), ServiceSetTime.class); 
              Intent sms = new Intent(getApplicationContext(), SmsService.class); 

              intentBA.putExtra("SOBH", Sobh.substring(0, 5)); 
              intentBA.putExtra("ZOHR", Zohr.substring(0, 5)); 
              intentBA.putExtra("MAGHREB", Maghreb.substring(0, 5)); 
              intentBA.putExtra("ASR", Asr.substring(0, 5)); 
              intentBA.putExtra("ISHA", Isha.substring(0, 5)); 

              PendingIntent pintentBA = PendingIntent.getService(getApplicationContext(), 0, intentBA, 0); 
              AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
              alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30 * 1000, pintentBA); 

              sms.putExtra("SOBH", Sobh.substring(0, 5)); 
              sms.putExtra("ZOHR", Zohr.substring(0, 5)); 
              sms.putExtra("MAGHREB", Maghreb.substring(0, 5)); 
              sms.putExtra("ASR", Asr.substring(0, 5)); 
              sms.putExtra("ISHA", Isha.substring(0, 5)); 

              PendingIntent pintentsms = PendingIntent.getService(getApplicationContext(), 0, sms, 0); 
              AlarmManager alarmsms = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
              alarmsms.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 60 * 1000, pintentsms); 

              // some code 
           }); 

         } 
        }, new IntentFilter(ServiceURL.Service) 
      ); 


       } 
      }); 
     } 


} 


@Override 
protected void onResume() { 
    super.onResume(); 
    startService(new Intent(this, ServiceURL.class)); 
    } 

@Override 
protected void onPause() { 
    super.onPause(); 
    // stopService(new Intent(this, ServiceURL.class)); 

} 

注:由於編輯代碼這裏也許有些括號不是真的,忽略他們感謝

回答

0

確保你是不是退出時結束應用程序的進程。使用

finishAffinity(); 

退出應用程序。

+0

號:((仍然是相同的,當然,正如我以前說過的一些設備不huwaie設備 – hdiz

0

它取決於設備的型號。如果您從應用程序堆棧中刪除應用程序,不同設備的行爲會有所不同

某些設備可能會停止應用程序的進程,並且不會啓動任何一個警報管理器,但另一個設備只會關閉活動,但進程仍處於活動狀態。

嘗試使用https://stackoverflow.com/a/16698105/2930077確定過程是活還是不

+0

工作,不是所有的人,比如這樣,什麼我是否可以在所有設備上工作?你的意思是不可能嗎? – hdiz

+0

是的,如果用戶獨立停止應用程序,那麼應用程序不能再次運行,直到用戶手動運行。或者,您可以嘗試註冊ACTION_BOOT_COMPLETED或聽取通知幫助再次運行你的應用程序 – user2930077

+0

當屏幕關閉和觸控板激活時出現同樣的問題,並且不受用戶干預 – hdiz

相關問題