首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >块通知条

块通知条
EN

Stack Overflow用户
提问于 2014-02-19 10:36:34
回答 2查看 1.7K关注 0票数 4

我需要有根的android平板电脑处于“kiosk模式”,所以通知栏应该被禁用(而不是像全屏游戏那样隐藏)。

此代码仅暂时隐藏条形图:

代码语言:javascript
复制
this.requestWindowFeature(Window.FEATURE_NO_TITLE);    // Removes title bar
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,                 
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main); 

当我把这个放在AndroidManifest的应用程序部分时,也是一样的:

代码语言:javascript
复制
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

我试图通过adb命令禁用android-ui。

代码语言:javascript
复制
pm disable com.android.systemui

但我连导航按钮都没有!我只需要顶部的通知栏被封锁!

那么,我如何阻止不能打开通知栏呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-22 20:01:24

我知道,这不是这个问题的一般解决方案,但就我而言,我可以这样做。

我对SystemUI.apk进行了建模。

我删除了statusbar的背景,并将高度和宽度设置为内容视图的0倾角。

这只能是因为我只为我自己的同一套平板电脑提供我的应用程序!!

票数 1
EN

Stack Overflow用户

发布于 2014-02-19 11:40:29

据我所知,没有正式的方法来做到这一点,因为它可能被恶意使用,但这是我实现它的方式。它的工作原理是粗暴地杀死处理Nav/Action等的系统服务,但这是我唯一能找到的工作方法。

--这将阻塞所有的导航按钮、操作栏等。我不知道有什么方法只停止其中一个

hideNav()在主活动中被称为onCreate,showNav()是从onDestroy调用的,如果您想让管理员访问操作系统,就需要showNav(),因为除非您特别重新启动服务,否则您将无法在设备周围导航。

我的应用程序有一个退出按钮,只能用密码访问。该按钮调用getActivity().finish(),您需要调用该活动的onDestroy方法。

注意:我已经阅读过一些设备上的systemui服务并不总是42,所以您的平板电脑可能需要在命令中使用不同的数字。

代码语言:javascript
复制
public void hideNav()
{
    Log.v(tag, "hideNav");
      try
      {
          Process p;
          p = Runtime.getRuntime().exec("su"); 

          // Attempt to write a file to a root-only
          DataOutputStream os = new DataOutputStream(p.getOutputStream());
          os.writeBytes("service call activity 42 s16 com.android.systemui\n");

          // Close the terminal
          os.writeBytes("exit\n");
          os.flush();
          p.waitFor();

      }
      catch (Exception e)
      {
          Log.e(tag, "hideNav " + e.getMessage());
      }

}

public void showNav()
{
    Log.v(tag, "showNav");

    try{
         Process p;
         p = Runtime.getRuntime().exec("su"); 

         DataOutputStream os = new DataOutputStream(p.getOutputStream());
         os.writeBytes("am startservice -n com.android.systemui/.SystemUIService\n");

         // Close the terminal
         os.writeBytes("exit\n");
         os.flush();
         p.waitFor();
    }catch (IOException e) {
        e.printStackTrace();
        Log.e(tag, "showNav " + e.getMessage());
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
        Log.e(tag, "showNav " + e.getMessage());
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21877913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档