如何在没有用户许可的情况下自动自动启动android应用?

时间:2019-07-16 03:43:05

标签: android service background location autostart

我想在android中使用后台服务。为此,我使用了后台服务,前台服务和作业计划程序。但是,如果未启用自动启动选项,我的应用程序将无法在后台运行。

我还添加了background,前台服务和Job Scheduler。 我添加了代码以将用户重定向到自动启动设置启用。 正如我在许多应用程序中看到的那样,他们不会要求用户启用自动启动功能(例如whatsapp,flipkart)。

    private void scheduleJob() {
    ComponentName componentName = new ComponentName(this, MyJobService.class);
 JobInfo jobInfo = new JobInfo.Builder(123, componentName)
                    .setRequiredNetworkType(JobInfo.NETWORK_TYPE_NONE)
    //                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
                    .setPersisted(true) // job alive even if we reboot
    //                .setPeriodic(15 * 60 * 1000) // 15 mins
                    .setPeriodic(5 * 1000) // 5 secs
                    .build();
            JobScheduler jobScheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
            int resultCode = jobScheduler.schedule(jobInfo);

            if (resultCode == JobScheduler.RESULT_SUCCESS) {
                Log.e(TAG, "Job Scheduled");
            } else {
                Log.e(TAG, "Job Scheduling failed");
            }

在未启用自动启动选项的情况下,我的应用无法在后台运行。         我希望它自动启用。 Autostart enables automatically when you install app

1 个答案:

答案 0 :(得分:0)

可以实施创建粘性服务并在您的主要活动中注册它,并且在启动完成后,只要需要重新启动应用程序,就应该刷新服务,只需刷新服务并创建通知或刷新服务即可。代码:

public static Boolean RestartApp1(Activity activity) {
    if (!GlobalData.checkAndRequestPermissions(activity)) {
        Intent i = activity.getBaseContext().getPackageManager().getLaunchIntentForPackage(activity.getBaseContext().getPackageName());
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        activity.startActivity(i);

        return false;
    } else {
        return true;
    }
}


if (GlobalData.RestartApp1(activity)) {
        getSharedData();
        findViews();
        initViews();
        setActionBarSDK();
}