如何制作无法关闭的Android应用程序

How make a Android application that can't be closed



我正在为一家公司开发一个 Android 应用程序,而使用它的人是员工,因此公司要求我开发一个应用程序用户不能关闭,因为如果他不会将智能手机用于其他目的,但为此我需要 Android 本机按钮不干扰应用程序。

我已经停用了返回并将应用程序设为首页的按钮。

@Override
     public void onBackPressed () {
         super.onBackPressed ();
     }

...

<category android: name = "android.intent.category.HOME" />

但是,如果用户单击显示打开的应用程序的按钮,则可以退出该应用程序。

我在创建解决这个问题之前进行了很多研究,并实现了解决这个问题的几次尝试。

一个。我试图创建与 MX Player 相同的行为,当您使用锁查看视频时,MX Player 始终位于所有内容之上,让用户查看和单击其他地方。但是,使用此行为我无法看到我的对话框或弹出窗口,也无法应用主题,因为在我的情况下,不仅仅是一个 activity 是整个应用程序。

我尝试的参考链接
How to disable Home and other system buttons in Android?
http://www.piwai.info/chatheads-basics/

如果有人知道如何使用 MX Player 的这种行为,或者如果有人知道如何让用户无法关闭应用程序,请帮助我,我知道不仅仅是我有这个问题。

欢迎任何帮助!

我的 API 是 16 - Android-4.1

您的目标设备是否已获得 root 权限?如果是这样,this article 将完成使这成为可能的步骤。您具体询问的内容可以通过修改 build.prop 文件以包含以下行来完成:qemu.hw.mainkeys=1。这将停止显示软键导航栏。

如果您 运行 的设备未获得 root 权限,我认为无法执行您的要求。

我发现用户无法访问其他应用程序的最佳方法是提供一项服务来检查哪个是顶级 activity,如果不是,则重新打开我的应用程序。

ActivityManager manager = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> runningTasks = manager.getRunningTasks(1);

if (runningTasks != null && runningTasks.size() > 0) {
    ComponentName topActivity = runningTasks.get(0).topActivity;

    if (!topActivity.getPackageName().startsWith("com.mypackage.")) {
        Log.i("Top Activity", topActivity.getPackageName());
        if (LocalCache.getInstance().isForceHome()) {
            Intent intent = new Intent(HomeService.this, AuthLoginActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }
    }
    handler.postDelayed(this, 500);
}

老问题,但我面临完全相同的情况:

  • 内部应用程序
  • 无法关闭

我要将应用程序设置为启动器,并阻止上下滑动以防止出现状态栏。

我觉得做个自研的App就够了~