gpt4 book ai didi

java - 如何在系统启动时启动一个服务并每1分钟重复一次

转载 作者:太空宇宙 更新时间:2023-11-04 12:58:49 25 4
gpt4 key购买 nike

我有一个 BroadcastReceiver 来启动我的服务,该服务使用异步来发出 HTTP 请求,然后显示通知,但我没有让该服务在系统每次自动启动时运行,然后每 1 分钟运行一次。

这是我的 AndroidManifest:

<receiver android:name=".notificar.InicializarServico" android:exported="false">
<intent-filter>
<action android:name="INICIALIZAR_SERVICO"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
<service android:enabled="true" android:name=".notificar.ServicoNotificar">
<intent-filter>
<action android:name="SERVICO_ATUALIZAR"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</service>

BroadcastReceiver的代码在这里:

public class InicializarServico extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
Log.v("NAMURA LANCHES", "O SISTEMA FOI INICIADO");
Log.v("NAMURA LANCHES", "Iniciando o serviço de atualização");
// Preparar Intent para inicializar o serviço
agendar(context, 5);
Log.v("NAMURA LANCHES", "O Serviço sera iniciado em 15 segundos");

}

private void agendar(Context context, int i) {
Intent myIntent = new Intent(context, ServicoNotificar.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, myIntent, 0);

AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, i); // first time
long frequency= i * 1000; // in ms
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), frequency, pendingIntent);
}
}

这是我的服务类别:

public class ServicoNotificar extends Service{

private String RequestURL = "http://sandbox.omeuprofissional.com/requests/meus_pedidos.php";
private final int duration = 3000;
private static final String ACTION_RESCHEDULE =
"br.com.namuralanches.android.intent.action.SERVICE_RESCHEDULE";
Handler myHandler;

@Override
public IBinder onBind(Intent intent) {

return null;
}

Thread testThread;
boolean threadRunning = false;

@Override
public void onCreate() {
super.onCreate();
myHandler = new Handler();
}

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

Log.d("NAMURA LANCHES", "Service started");
myHandler.postDelayed(new Runnable() {

@Override
public void run() {

SharedPreferences preferencias = getSharedPreferences("mesa", MODE_PRIVATE);
String registro = preferencias.getString("REGISTRO_MESA", null);
String hashMesa = preferencias.getString("HASH_MESA", null);

if ((registro != null) || (hashMesa != null)) {
new ListarCompras().execute(RequestURL, hashMesa, registro);
}
}
}, 10000);

stopSelf(startId);
return START_NOT_STICKY;
}

@Override
public void onDestroy() {
Log.v("NAMURA LANCHES", "SERVICO DESTRUIDO");
super.onDestroy();
threadRunning = false;
}
}

我做了一些更改,现在我迷失了,我什至看不到创建服务的日志,只看到了 BroadcastReceiver 的日志

最佳答案

您必须使用 AlarmManager 来启动您的服务。要使用 AlarmManager,您需要一个要触发警报的待处理 Intent。像这样:

  1. 首先,创建一个将由 Intent 触发的接收器,

  2. 在您的 Activity 中,创建触发接收器的 Intent ,

  3. 为触发接收器的 Intent 创建一个挂起的 Intent,最后 4. 使用警报管理器来触发挂起的 Intent。
  4. 请记住,当您的接收器收到来自警报管理器的内容时​​,它将通过 Intent 启动您的服务。您可以使用alarmManager的setRepeating方法来设置重复时间。

例如查看此堆栈溢出帖子 How to start Service using Alarm Manager in Android? .

有关详细信息,请查看此链接(与 AlarmManager 一起用于定期任务) https://guides.codepath.com/android/Starting-Background-Services

希望这有帮助。

关于java - 如何在系统启动时启动一个服务并每1分钟重复一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35120445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com