Ответ 1
Добавьте (приложение) Service
к вашему приложению. Несмотря на то, что пользователь покинул приложение, служба все равно будет работать в фоновом режиме.
Кроме того, вы можете реализовать BroadcastReceiver, который будет прослушивать телефонные намерения и начать запуск вашего сервиса при загрузке телефона!
MyService.java
public class MyService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId){
// START YOUR TASKS
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
// STOP YOUR TASKS
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent){
return null;
}
BootReceiver.java
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
Intent serviceIntent = new Intent("your.package.MyService");
context.startService(serviceIntent);
}
}
}
}
AndroidManifest.xml
//в теге манифеста
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
//в вашем теге приложения
<service android:name=".MyService">
<intent-filter>
<action android:name="your.package.MyService" />
</intent-filter>
</service>
<receiver
android:name=".BootReceiver"
android:enabled="true"
android:exported="true"
android:label="BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
Если вы хотите запустить свою услугу из одной активности, просто используйте
private boolean isMyServiceRunning() {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (MyService.class.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
if (!isMyServiceRunning()){
Intent serviceIntent = new Intent("your.package.MyService");
context.startService(serviceIntent);
}