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

相关问题