如何防止用户关闭应用程序 - Android 4.0.3

5

我的问题是:是否可以防止用户关闭应用程序。

问题在于我无法隐藏操作栏,而且我只使用平板电脑进行工作时间注册。因此,如果有人按下主页按钮或返回按钮,则不可接受。

所以我想知道是否能够处理onclose事件?

是否可以全屏打开应用程序(没有操作栏)?


而负面评价的原因是什么?这位发帖者想要为Android创建一个展示模式应用程序。 - David Wasser
试试这个stackoverflow搜索:http://stackoverflow.com/search?q=[android]+kiosk。我相信你会在那里找到你想要的东西(或者至少得到一些想法)。 - David Wasser
@DavidWasser 作为一个领域专家,为这个问题和未来类似的问题找到一个好的“关闭重复”目标可能会有所帮助。 - AakashM
5个回答

4

如果用户按下主页按钮,你无法防止应用程序关闭。这就是它的整个设计理念。否则,你可能会让用户陷入你的应用程序中,没有任何退出方式,除非重新启动设备。


是的,那正是我所需要的。用户被困在我的应用程序中。你有什么想法怎样做到这一点吗? - Mihael Meklav
@Michael - 你最好拥有自己的Android版本,这样你就可以陷阱他们了。 - James Black
10
不是这样的。你可以编写一个主屏幕替代应用程序,它将在按下HOME键时接管控制权。发帖者想要创建一个只运行单个应用程序的单一用途设备。他不是在谈论一个市场上随机用户可以下载的应用程序。此外,你不需要创建自己的ROM来完成这个操作。那会比它的价值更加费力。 - David Wasser
他没有说明应用程序的目的,所以我假设它是“常规”安卓应用程序,而不是启动器应用程序。 - Tomislav Novoselec

4

3
一个用户总是可以关闭应用程序,否则会出现滥用程序并引起问题的情况,但是有一些步骤可以使您更好地处理应用程序被关闭的情况。
例如,如果您运行一个远程服务,可以检查应用程序是否在运行,那么它就可以触发一个意图来重新启动应用程序,这有多种方法可以实现。
了解程序是否正在运行的一种方式是让其定期调用服务,从而进行心跳检查,如果在一段时间内没有进行调用,这段时间应该是预期检查周期的2到3倍,那么就触发意图。
还有其他可能有效的步骤,例如如果检测到按下主页按钮,但我需要仔细思考这些步骤。我认为这取决于您的期望,因为将某人困在您的程序中是非常糟糕的。

是的,将某人困在应用程序中确实很糟糕,但这个平板电脑只有为该应用程序而存在。 - Mihael Meklav
1
将用户限制在单个应用程序中有完全合理的原因。Android平板电脑非常适合安装在信息亭中,或者使用“信息亭模式”,这正是它的用途-设备变成了单一用途设备(即:它仅运行一个应用程序)。您不需要费力地构建自己的ROM。 - David Wasser
@DavidWasser - 他想确保它始终处于运行状态,无法被关闭,而主页按钮可能是问题所在,因为其他东西可能会启动。但这就是我建议的一个可能的解决方案,当我再考虑一下时,这可能是正确的解决方案(检测主页按钮按下)。但是,在标准Android操作系统上永远不让它死机会很困难。 - James Black
1
@JamesBlack 我们已经成功地为Android平板电脑构建了kiosk模式应用程序(而不需要一个看门狗服务来重新启动应用程序)。如果它是设备上唯一运行的应用程序,我从未见过Android会杀死HOME屏幕替换。当然,你的情况可能会有所不同;-) - David Wasser

2
尝试这个...
//Remove title bar

this.requestWindowFeature(Window.FEATURE_NO_TITLE);


//Remove notification bar

this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

参考 -> 如何在XML中隐藏活动的标题栏,并使用现有的自定义主题 为防止用户......
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode==KeyEvent.KEYCODE_BACK || keyCode==KeyEvent.KEYCODE_HOME){
                    // pass some msg ......
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);这行代码的作用是设置当前窗口为全屏模式。 - Mihael Meklav
你把这段代码放在哪里了?是在哪个方法里?它需要放在onCreate()里,在调用setContentView()之前完成。 - David Wasser
请参考以下链接以隐藏Activity的标题栏:https://dev59.com/WnE85IYBdhLWcg3w1HKF - Hardikgiri Goswami

2
这是我的解决方案...
首先,您需要安装 SureLock 应用程序的试用版。然后在该应用程序中禁用操作栏。就这样。
如果您想再次查看操作栏,则需要使用 HideBar 应用程序
所有这些都只适用于已经 root 的设备...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接