隐藏平板电脑系统栏

14

我希望隐藏平板电脑的系统栏。我搜索了很多但没有成功。我为此添加了一张图片。

我发现了一些解决方案,例如:

View v = findViewById(R.id.view_id);
v.setSystemUiVisibility(View.STATUS_BAR_HIDDEN); 

但我不知道如何使用它 在此输入图像描述

我知道这是可能的,例如http://forum.xda-developers.com/showthread.php?t=1228046。有人知道如何做到这一点吗?


1
"我知道这是可能的"--这需要root权限。 - CommonsWare
1
该应用程序可以通过获取root权限来终止“com.android.systemui”进程 - 这并不是非常优雅,但可以隐藏/终止状态栏。 - zapl
杀掉并且永远不要启动它 - 就像你所说的那样,很糟糕。你有没有想到一种优雅的方法来做到这一点?(和/或测试了sureLock吗?) - Nate-Wilkins
@Nate,我发布了一个答案,请查看。希望你也能解决你的问题... - Chirag Patel
11个回答

7

代码片段:显示/隐藏已root的Android平板电脑状态栏

隐藏:


            Process proc = null;

            String ProcID = "79"; //HONEYCOMB AND OLDER

            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){
                ProcID = "42"; //ICS AND NEWER
            }

            try {
                proc = Runtime.getRuntime().exec(new String[] { "su", "-c", "service call activity "+ProcID+" s16 com.android.systemui" });
            } catch (Exception e) {
                Log.w("Main","Failed to kill task bar (1).");
                e.printStackTrace();
            }
            try {
                proc.waitFor();
            } catch (Exception e) {
                Log.w("Main","Failed to kill task bar (2).");
                e.printStackTrace();
            }

展示:
            Process proc = null;
            try {
                proc = Runtime.getRuntime().exec(new String[] { "su", "-c", "am startservice -n com.android.systemui/.SystemUIService" });
            } catch (Exception e) {
                Log.w("Main","Failed to kill task bar (1).");
                e.printStackTrace();
            }
            try {
                proc.waitFor();
            } catch (Exception e) {
                Log.w("Main","Failed to kill task bar (2).");
                e.printStackTrace();
            }

йҖҡиҝҮadb shellдҪҝз”Ёе‘Ҫд»Өservice call activity 42 s16 com.android.systemuiжҳҜжңүж•Ҳзҡ„гҖӮдҪҶжҳҜпјҢеҪ“дҪҝз”ЁжӮЁдёҠйқўеҸ‘еёғзҡ„д»Јз Ғж—¶пјҢе®ғж— жі•йҡҗи—ҸзҠ¶жҖҒж Ҹе’ҢеҜјиҲӘж ҸгҖӮжҲ‘йңҖиҰҒдёәжҲ‘зҡ„еә”з”ЁзЁӢеәҸиҝӣиЎҢд»»дҪ•е…¶д»–и®ҫзҪ®/жқғйҷҗжүҚиғҪжү§иЎҢжӯӨж“ҚдҪңеҗ—пјҹ - taymless
@taymless:您的设备应该已经取得了root权限,您的应用程序也应该已经获得了su权限。除此之外,我没有进行任何其他设置来实现上述功能。 - Basher51
谢谢。不确定是否是我的设备问题,但它没有要求 su 权限。我改用了你发布的隐藏/显示命令方法,它可行。http://www.stealthcopter.com/blog/2010/01/android-requesting-root-access-in-your-app/。 - taymless

4
最终,经过长时间的搜索,我找到了一些满足我的需求的替代方案。
我知道作为程序员,退缩并不是一个好主意,但为了赶时间,我使用了这种方式...
我发现了这个链接和应用程序,它可以满足我的需求。
如果你也需要在你的应用程序中实现这样的功能,请访问以下链接:http://www.42gears.com/blog/2012/04/how-to-hide-bottom-bar-in-rooted-android-3-0-tablets-using-surelock/ 感谢所有帮助我解决问题的人。

1
@chirag-saga 不是SureLock是一个付费应用吗?我认为一个好的替代品是HideBar - https://github.com/ppareit/HideBar(它也需要root以及BusyBox) - ılǝ

2

系统栏不可隐藏。API中没有允许它的任何内容。这是因为用户始终需要访问主页和返回键,以防应用程序冻结或出现一些用户只需要退出应用的问题。你只能隐藏操作栏。


实际上,在平板电脑上,至少在Jelly Bean上,有一种方法可以暂时隐藏系统栏,但是只要用户点击屏幕,栏就会返回。 - CommonsWare
抱歉,那只适用于手机。由于某种原因,我以为它也适用于平板电脑。我想到的是 SYSTEM_UI_FLAG_HIDE_NAVIGATION。请原谅我的错误。 - CommonsWare
3
AndiJay - 对于普通消费者使用,那是正确的原因。 然而,在企业界中,使用Android平板电脑作为微型信息亭的需求正在增加。 目前,唯一的方法是通过对平板电脑进行root以实现这一点。 我希望看到Android添加一个“信息亭”模式来解决这种情况。 无论如何,您的答案是正确的,但并非适用于每种情况。 当平板电脑被用作信息亭时,用户不应该访问除单个应用程序之外的任何内容。 - Justin
有趣的观点。我想知道谷歌是否会正式支持一种移除系统栏的方法。他们可以走Windows 8的路线,你需要从屏幕边缘做一个滑动手势。 - Andi Jay

1
var width = innerWidth;

var height = innerHeight;

我认为这段代码对你有帮助。它虽然不能隐藏平板电脑栏,但可以让你的应用程序适配任何设备。你可以在 Cordova 移动应用程序中使用此代码。(我在 JavaScript 中使用了此代码)


1
这并没有回答OP的问题,就像你自己提到的那样(“它没有隐藏系统栏”)。如果您对帖子有注释,请发表评论。一旦获得在任何地方发布的特权,您就可以这样做。 - T3 H40

1
你只需要使用 SYSTEM_UI_FLAG_IMMERSIVE_STICKY | SYSTEM_UI_FLAG_HIDE_NAVIGATION | SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 这三个标志的组合。例如,如果你使用OpenGL和glSurfaceView作为你的surface:
glSurfaceView.setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
                View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
                View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

在底部滑动以查看底部栏,几秒钟后它将再次隐藏。

1
有一种绕过方法可以在几乎所有平板电脑上禁用菜单栏而无需root。但这有点棘手,但它可以干净地工作。目前市场上的几个知名应用程序使用此策略来实现其应用程序的禁用菜单栏功能。
授予管理员权限。
使用设备管理器配置文件设置密码并锁定设备。
然后在本机锁屏界面之上加载任何UI(当然,在活动之间进行过渡时会显示背景锁屏界面。但是如果逻辑组织得好,那么用户将感觉流畅且不太显眼)。
需要重新启用时,使用设备策略管理器对象的resetPassword(“”,0)重置密码即可。

0

我相信对于所有的安卓设备来说都是一样的。

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                     WindowManager.LayoutParams.FLAG_FULLSCREEN);

我也发现了另一个解决方案,但这当然只是一个名为surelock的单独应用程序。

http://onkarsingh.sys-con.com/node/2184158

编辑:

上述代码无法隐藏平板电脑栏。我将保留我的答案,供那些想要在其他安卓设备中隐藏系统栏的人参考。


是的,CommonsWare 是正确的。我也尝试过这个方法,但对于平板电脑不起作用。 - Chirag Patel
1
什么不起作用?代码还是SureLock?SureLock有两个选项 - “隐藏底部栏”和“禁用底部栏”。第一个选项需要root权限。第二个选项无需root权限即可使用! - PC.
我的代码示例似乎没问题,但SureLock却说有问题。尽管如此,我并没有使用过它。 - Nate-Wilkins

0

我在一款Galaxy Tab上发现了一个技巧,可以将其用作信息亭,具体方法请参考三星开发者指南

你可以让你的应用程序覆盖锁定系统,并要求返回按钮返回到你的应用程序的起始活动/视图。我已经为一个Web View应用程序完成了这个操作。

    @Override
    public void onBackPressed() {
        //here asking to go back to home page
        mWebView.loadUrl(mHomepageUrl);
    }

如果要求在锁定系统中保持唤醒状态,请在onCreate方法中实现:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

然后当您两次点击电源按钮时,您会发现您的应用程序已经恢复,状态栏上只有返回按钮是活动的

因此,唯一的方法是重新启动平板电脑(这样您就可以使用经典的锁定系统来打开平板电脑)

如果访客无法访问电源按钮,或者只有您知道解锁代码,则可能会有用


0
你无法隐藏它,但可以简单地禁用它,除了主页。试试this link.。使用SYSTEM_UI_FLAG_LOW_PROFILE,你可以减暗系统栏,并通过onWindowFocusChanged()获得焦点并折叠它。

因此,您可以赋予您的应用程序HOME powa。 - Philippe T.

-1
为了在Android中创建一个Kiosk应用程序,您需要以下步骤: - 重写onkeydown方法
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode==KeyEvent.KEYCODE_BACK || keyCode==KeyEvent.KEYCODE_HOME){


        startActivity(new Intent(this,MainActivity.class));
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

然后在清单文件中将您的活动设置为启动器活动,以覆盖主页按钮。

<intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.HOME" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

不需要那些要求一百万权限的奇怪的锁屏应用程序。您无需对手机进行Root。


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