即使应用程序关闭,如何保持警报管理器运行?

用户10445346

我想要在我的 MainActivity.java 文件中有一个 AlarmManager,它会每分钟触发一个 IntentService。

我写的代码是:

public void scheduleAlarm() {
    Intent intent = new Intent(getApplicationContext(), MyAlarmReceiver.class);
    final PendingIntent pendingIntent = PendingIntent.getBroadcast(this, MyAlarmReceiver.REQEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    long firstMillis = System.currentTimeMillis();
    AlarmManager alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, firstMillis, 60000, pendingIntent);
}

这是我的 IntentService:

public class MyTestService extends IntentService {

    public MyTestService() {
        super("MyTestService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        Log.d("tag_tag_tag", "Service running");

        String filename = "example.txt";
        String fileContents = "\ndone ";
        FileOutputStream fos = null;

    try {
            fos = openFileOutput(filename, MODE_APPEND);
            fos.write(fileContents.getBytes());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
       }

    }
}

在这里,我只是附加到一个文件中,只是为了检查即使在应用程序关闭后服务是否还在运行,但它没有。

这是我的接收器:public class MyAlarmReceiver extends BroadcastReceiver {

    public static final int REQEST_CODE = 12345;
    public static final String ACTION = "com.always_in_beta.bekar";

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent i = new Intent(context, MyTestService.class);
        i.putExtra("foo", "bar");
        context.startService(i);
    }
}

我希望即使在应用程序关闭后,此服务也能在后台每分钟触发一次。

格鲁伊贝格

使用 AlarmManager 非常不可靠,尤其是从 Android M 开始。手机打瞌睡模式会忽略警报事件。我使用 Firebase JobDispatcher https://github.com/firebase/firebase-jobdispatcher-android非常适合此目的。代码: 摇篮:

implementation 'com.firebase:firebase-jobdispatcher:0.8.5'

职位类别:

import com.firebase.jobdispatcher.JobParameters;
import com.firebase.jobdispatcher.JobService;

public class MyTestService extends JobService {
@Override
public boolean onStartJob(JobParameters job) {
    // something like
 Log.d("tag_tag_tag", "Service running");

    String filename = "example.txt";
    String fileContents = "\ndone ";
    FileOutputStream fos = null;

try {
        fos = openFileOutput(filename, MODE_APPEND);
        fos.write(fileContents.getBytes());
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (fos != null) {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
   }

    return false; // Answers the question: "Is there still work going on?"
}

@Override
public boolean onStopJob(JobParameters job) {
    return false; // Answers the question: "Should this job be retried?"
}

}

显现:

<service
android:exported="false"
android:name=".MyTestService">
<intent-filter>
    <action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE"/>
</intent-filter>

在您的活动中,创建调度程序:

// Create a new dispatcher using the Google Play driver.
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(context));

然后安排工作:

Job myJob = dispatcher.newJobBuilder()
.setService(MyTestService.class) // the JobService that will be called
.setTag("my-unique-tag")        // uniquely identifies the job
.setRecurring(true)
.setTrigger(Trigger.executionWindow(1*60-10,1*60+10))//1 minute +/- 10 seconds
.build();

dispatcher.mustSchedule(myJob);

这应该有效,至少对我有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

即使关闭应用程序,如何保持IntentService运行?

来自分类Dev

关闭应用程序时未触发Android警报管理器

来自分类Dev

xcode项目管理器在运行应用程序时关闭文件夹

来自分类Dev

为什么即使关闭应用程序后,我的应用程序进程仍在任务管理器中存在一段时间?

来自分类Dev

如何知道应用程序是从控制台还是资源管理器运行的?

来自分类Dev

即使应用程序在后台,如何保持后台计时器在本机运行

来自分类Dev

即使崩溃,如何保持图形应用程序运行?

来自分类Dev

Android密码管理器应用程序如何工作?

来自分类Dev

关闭终端后如何保持应用程序运行?

来自分类Dev

关闭终端后如何保持应用程序运行?

来自分类Dev

如何获得当前正在运行的应用程序列表类似任务管理器除了使用JAVA后台运行的应用程序?

来自分类Dev

Chrome 计时器扩展程序 - 即使扩展程序关闭,如何保持计时器运行?

来自分类Dev

使用任务管理器关闭应用程序时停止Android服务

来自分类Dev

通过任务管理器关闭后,应用程序不会再次启动

来自分类Dev

应用程序在共享托管中保持活动状态,无法访问IIS管理器

来自分类Dev

即使关闭应用程序也能保持服务活跃

来自分类Dev

运行Windows任务管理器无法显示的应用程序?

来自分类Dev

应用程序被任务管理器杀死后,服务是否仍可以运行?

来自分类Dev

当应用程序在后台被杀死并且设备被锁定时,警报管理器将无法工作

来自分类Dev

应用程序处于打ze模式时,警报管理器触发的Android通知未触发

来自分类Dev

如果使用任务管理器关闭了应用程序,那么c#表单关闭事件会起作用吗?

来自分类Dev

即使用户关闭了应用程序,是否也可以继续运行倒数计时器

来自分类Dev

警报管理器立即运行

来自分类Dev

警报管理器运行活动

来自分类Dev

关闭应用程序后,保持连接广播接收器运行

来自分类Dev

关闭应用程序后,保持连接广播接收器运行

来自分类Dev

您如何在不使用广播管理器的情况下在应用程序中识别互联网是关闭还是打开

来自分类Dev

如何从flutter应用程序启动高级下载管理器(ADM)应用程序并为其提供下载数据?

来自分类Dev

从Android应用程序打开文件管理器

Related 相关文章

  1. 1

    即使关闭应用程序,如何保持IntentService运行?

  2. 2

    关闭应用程序时未触发Android警报管理器

  3. 3

    xcode项目管理器在运行应用程序时关闭文件夹

  4. 4

    为什么即使关闭应用程序后,我的应用程序进程仍在任务管理器中存在一段时间?

  5. 5

    如何知道应用程序是从控制台还是资源管理器运行的?

  6. 6

    即使应用程序在后台,如何保持后台计时器在本机运行

  7. 7

    即使崩溃,如何保持图形应用程序运行?

  8. 8

    Android密码管理器应用程序如何工作?

  9. 9

    关闭终端后如何保持应用程序运行?

  10. 10

    关闭终端后如何保持应用程序运行?

  11. 11

    如何获得当前正在运行的应用程序列表类似任务管理器除了使用JAVA后台运行的应用程序?

  12. 12

    Chrome 计时器扩展程序 - 即使扩展程序关闭,如何保持计时器运行?

  13. 13

    使用任务管理器关闭应用程序时停止Android服务

  14. 14

    通过任务管理器关闭后,应用程序不会再次启动

  15. 15

    应用程序在共享托管中保持活动状态,无法访问IIS管理器

  16. 16

    即使关闭应用程序也能保持服务活跃

  17. 17

    运行Windows任务管理器无法显示的应用程序?

  18. 18

    应用程序被任务管理器杀死后,服务是否仍可以运行?

  19. 19

    当应用程序在后台被杀死并且设备被锁定时,警报管理器将无法工作

  20. 20

    应用程序处于打ze模式时,警报管理器触发的Android通知未触发

  21. 21

    如果使用任务管理器关闭了应用程序,那么c#表单关闭事件会起作用吗?

  22. 22

    即使用户关闭了应用程序,是否也可以继续运行倒数计时器

  23. 23

    警报管理器立即运行

  24. 24

    警报管理器运行活动

  25. 25

    关闭应用程序后,保持连接广播接收器运行

  26. 26

    关闭应用程序后,保持连接广播接收器运行

  27. 27

    您如何在不使用广播管理器的情况下在应用程序中识别互联网是关闭还是打开

  28. 28

    如何从flutter应用程序启动高级下载管理器(ADM)应用程序并为其提供下载数据?

  29. 29

    从Android应用程序打开文件管理器

热门标签

归档