当前位置: 首页 > 知识库问答 >
问题:

如何解决vivo和oppo新版本中活动几分钟后自动被杀的问题

姚建树
2023-03-14

我做了一个应用程序,这是一个应用程序,存储的位置信息的间隔,并发送给服务器的服务是在后台或地面模式下工作,它在一般的android手机运行良好。Btw app在oppo和vivo上线第一次活动后运行不畅,app(本次活动)在3~5分钟后就秒杀。

try {
Intent intent = new Intent();
String manufacturer = android.os.Build.MANUFACTURER;
if ("xiaomi".equalsIgnoreCase(manufacturer)) {
intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"));
} else if ("oppo".equalsIgnoreCase(manufacturer)) {
intent.setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.permission.startup.StartupAppListActivity"));
} else if ("vivo".equalsIgnoreCase(manufacturer)) {
//intent.setComponent(new ComponentName("com.vivo.permissionmanager", "com.vivo.permissionmanager.activity.BgStartUpManagerActivity"));
intent.setComponent(new ComponentName("com.iqoo.secure", "com.iqoo.secure.ui.phoneoptimize.AddWhiteListActivity"));
            }
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 
PackageManager.MATCH_DEFAULT_ONLY);
            if  (list.size() > 0) {
                startActivity(intent);
            }
        } catch (Exception e) {
               Crashlytics.logException(e);
            }
        Account account = createSyncAccount(this);
        Intent locationIntent = new Intent(this, UserLocationService.class);
        locationIntent.putExtra("extra.account", account);
        startService(locationIntent);
Intent i = new Intent(this, SynchronizeService.class);
SharedPreferences prefs = 
PreferenceManager.getDefaultSharedPreferences(this);
long synchTime = 
Long.parseLong(prefs.getString(Constants.SETTINGS_SYNCHRONIZE_INTERVAL, "210"));
i.setAction(SynchronizeService.ACTION_SET_ALARM);
if (!UserLocationService.isRepeated)
        i.putExtra(SynchronizeService.EXTRA_TIME, Long.valueOf("30"));
    else i.putExtra(SynchronizeService.EXTRA_TIME, synchTime);
    startService(i);

这是我的消息来源。你能帮我吗?我没有找到正确的解决方法。如果有人有解决方法吗?你能告诉我吗?

共有1个答案

贺栋
2023-03-14

是的,这是因为这些设备默认情况下只允许为某些白名单app提供后台服务。如果您的应用程序也必须工作,这意味着您必须从设置中启用自动启动,下面的代码将帮助您让用户为您的应用程序启用自动启动。如果启用了自动启动,您的服务将在后台运行良好。

private void enableAutoStart() {
    if (Build.BRAND.equalsIgnoreCase("xiaomi")) {
      new MaterialDialog.Builder(MainActivity.this).title("Enable AutoStart")
        .content(
          "Please allow QuickAlert to always run in the background,else our services can't be accessed when you are in distress")
        .theme(Theme.LIGHT)
        .positiveText("ALLOW")
        .onPositive(new MaterialDialog.SingleButtonCallback() {
          @Override
          public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {

            Intent intent = new Intent();
            intent.setComponent(new ComponentName("com.miui.securitycenter",
              "com.miui.permcenter.autostart.AutoStartManagementActivity"));
            startActivity(intent);
          }
        })
        .show();
    } else if (Build.BRAND.equalsIgnoreCase("Letv")) {
      new MaterialDialog.Builder(MainActivity.this).title("Enable AutoStart")
        .content(
          "Please allow QuickAlert to always run in the background,else our services can't be accessed when you are in distress")
        .theme(Theme.LIGHT)
        .positiveText("ALLOW")
        .onPositive(new MaterialDialog.SingleButtonCallback() {
          @Override
          public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {

            Intent intent = new Intent();
            intent.setComponent(new ComponentName("com.letv.android.letvsafe",
              "com.letv.android.letvsafe.AutobootManageActivity"));
            startActivity(intent);
          }
        })
        .show();
    } else if (Build.BRAND.equalsIgnoreCase("Honor")) {
      new MaterialDialog.Builder(MainActivity.this).title("Enable AutoStart")
        .content(
          "Please allow QuickAlert to always run in the background,else our services can't be accessed when you are in distress")
        .theme(Theme.LIGHT)
        .positiveText("ALLOW")
        .onPositive(new MaterialDialog.SingleButtonCallback() {
          @Override
          public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
            Intent intent = new Intent();
            intent.setComponent(new ComponentName("com.huawei.systemmanager",
              "com.huawei.systemmanager.optimize.process.ProtectActivity"));
            startActivity(intent);
          }
        })
        .show();
    } else if (Build.MANUFACTURER.equalsIgnoreCase("oppo")) {
      new MaterialDialog.Builder(MainActivity.this).title("Enable AutoStart")
        .content(
          "Please allow QuickAlert to always run in the background,else our services can't be accessed when you are in distress")
        .theme(Theme.LIGHT)
        .positiveText("ALLOW")
        .onPositive(new MaterialDialog.SingleButtonCallback() {
          @Override
          public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
            try {
              Intent intent = new Intent();
              intent.setClassName("com.coloros.safecenter",
                "com.coloros.safecenter.permission.startup.StartupAppListActivity");
              startActivity(intent);
            } catch (Exception e) {
              try {
                Intent intent = new Intent();
                intent.setClassName("com.oppo.safe",
                  "com.oppo.safe.permission.startup.StartupAppListActivity");
                startActivity(intent);
              } catch (Exception ex) {
                try {
                  Intent intent = new Intent();
                  intent.setClassName("com.coloros.safecenter",
                    "com.coloros.safecenter.startupapp.StartupAppListActivity");
                  startActivity(intent);
                } catch (Exception exx) {

                }
              }
            }
          }
        })
        .show();
    } else if (Build.MANUFACTURER.contains("vivo")) {
      new MaterialDialog.Builder(MainActivity.this).title("Enable AutoStart")
        .content(
          "Please allow QuickAlert to always run in the background.Our app runs in background to detect when you are in distress.")
        .theme(Theme.LIGHT)
        .positiveText("ALLOW")
        .onPositive(new MaterialDialog.SingleButtonCallback() {
          @Override
          public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
            try {
              Intent intent = new Intent();
              intent.setComponent(new ComponentName("com.iqoo.secure",
                "com.iqoo.secure.ui.phoneoptimize.AddWhiteListActivity"));
              startActivity(intent);
            } catch (Exception e) {
              try {
                Intent intent = new Intent();
                intent.setComponent(new ComponentName("com.vivo.permissionmanager",
                  "com.vivo.permissionmanager.activity.BgStartUpManagerActivity"));
                startActivity(intent);
              } catch (Exception ex) {
                try {
                  Intent intent = new Intent();
                  intent.setClassName("com.iqoo.secure",
                    "com.iqoo.secure.ui.phoneoptimize.BgStartUpManager");
                  startActivity(intent);
                } catch (Exception exx) {
                  ex.printStackTrace();
                }
              }
            }
          }
        })
        .show();
    }
  }

  public boolean checkServiceRunning() {
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(
      Integer.MAX_VALUE)) {
      if ("com.sac.speechdemo.MyService".equals(service.service.getClassName())) {
        return true;
      }
    }
    return false;
  }
 类似资料:
  • 我想在后台运行服务,即使应用被干掉。该功能在某些设备上运行良好。但在oppo、mi和Vivo手机中,如果应用程序被干掉,它就无法运行。如何为这些设备执行此操作

  • 我开发了一个Android应用程序,一旦滑块完成显示MainActivity,它就会有闪屏,但在我的情况下,一旦显示MainActivity,它会在几秒钟(大约5秒)后自动重新加载(就像MainActivity第一次打开时一样打开)。 这是我的SplashScreenActivity 飞溅屏幕适配器 主要活动 仅从这个活动中,我调用了FunctionsActivity(MainActivity)。

  • 我读过很多关于如何在几秒钟后以多种方式隐藏对话框的答案。然而,我不能得到这个工作与我的例子。 我正在使用一个opencart插件,当你在购物车中添加一个产品后会显示一个DIV,但它会一直保持在那里,只有当用户点击“继续购物”时才会关闭。我希望这个DIV在5秒后自动关闭。 我已经尝试setTimeout,延迟等,没有工作......所以我不确定我做错了什么: 代码是这样的: 有人能帮我吗? 编辑:

  • 问题内容: 在做一个小发布并将其标记之前,我想更新package.json以反映该程序的新版本。 有没有一种方法可以自动编辑文件? 需要帮助吗? 问题答案: 可能是正确的答案。只给一个替代我建议咕噜凸点。它由angular.js的一名成员维护。 用法: 如果仍然使用grunt,那可能是最简单的解决方案。

  • 我有一个有三个活动的应用程序。第一活动,第二活动,第三活动。 在第一个活动中有一个按钮,它启动第二个活动。在第二个活动中,有两种方法可以转到第三个活动。但是有一个方法有代码: 两个变体都使用此代码片段。 此代码在-12秒内自动运行 我的问题是:当用户按下Back键时,ThirdActivity会打开,但几秒钟后,ThirdActivity会从第一个变体再次打开。 那么,如何完全终止一个活动,使其在