怎样禁止下拉通知栏

     Android系统有下拉通知栏(如下图),但是有的项目需要禁止通知栏的下拉。今天找到一个方法,但是该方法在windows下的Eclipse编不过,在Linux服务器里编却能顺利通过。暂时没搞懂什么原因。【补充:源码环境下能编过】

 

      首先要在项目的AndroidManifest.xml里面要声明权限:

<uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>
<uses-permission android:name="android.permission.STATUS_BAR"/>
 

首先要导入StatusBarManager包,并声明一个对象:

import android.app.StatusBarManager;

private StatusBarManager mStatusBarManager;

    然后是初始化:mStatusBarManager = (StatusBarManager) getSystemService(Context.STATUS_BAR_SERVICE);

    下面的函数是禁止下拉通知栏:

public void ProhibitNotificationBar() {  		  
		 mStatusBarManager.disable(StatusBarManager.DISABLE_EXPAND);
	    }

      因为这种禁止的下拉是系统级别的,所以当我们退出时要及时的将其打开,否则所有的应用将无法使用下拉通知栏。打开下拉通知栏代码如下:

public void OpenNotificationBar() {  		  		 
		 mStatusBarManager.disable(StatusBarManager.DISABLE_NONE);
	    }

      补充:该种方法在windows的Eclipse里编不过,但是在Linux的服务器里能编过,不知道是什么原因.....

 

       今天又发现可有模仿视频播放器里,当播放视频的时候自动全屏,当视频结束活着点击屏幕时退出全屏的方法,关键代码如下:

//显示状态栏,Activity不全屏显示(恢复到有状态的正常情况)
	mRLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);	
	//隐藏状态栏,同时Activity会伸展全屏显示
	mRLayout.setSystemUiVisibility(View.INVISIBLE);
	//Activity全屏显示,且状态栏被隐藏覆盖掉。
	mRLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
	//Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态遮住
	mRLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
	//同mRLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
	mRLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
	//同mRLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
	mRLayout.setSystemUiVisibility(View.SYSTEM_UI_LAYOUT_FLAGS);
	//隐藏虚拟按键(导航栏)
	mRLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
	//状态栏显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏。
	mRLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);


 


 

### 如何在Android中禁用或阻止下拉通知栏 为了实现在特定场景如锁屏状态下禁止用户操作下拉通知栏的功能,可以考虑修改系统的源码文件。对于不同版本的Android操作系统有着不同的处理方式。 针对较新的Android版本(例如14.0),可以通过调整`LockscreenShadeTransitionController.kt`, `NotificationPanelViewController.java`以及`QuickSettingsController.java`这些位于`/frameworks/base/packages/SystemUI/src/com/android/systemui/*`路径下的核心类来达成目的[^2]。具体来说,通过重写或者新增逻辑控制当处于锁屏界面时不响应用户的拖拽手势从而达到关闭此功能的效果。 另外,在某些情况下如果只是单纯想要临时性的隐藏而非完全移除该组件,则可以在应用程序内部利用API接口完成这一需求。比如调用`setSystemUiVisibility()`方法并传入相应参数值以改变当前窗口的状态栏可见性属性;又或者是借助于全屏模式标记位(`FLAG_FULLSCREEN`)配合沉浸式体验标志(`SYSTEM_UI_FLAG_IMMERSIVE_STICKY`)一起作用使得顶部区域被遮挡而无法触发展开动作[^1]。 需要注意的是上述改动通常涉及到对AOSP项目的编译环境搭建及后续维护工作量较大,并且可能因为违反Google Play商店政策而导致应用上架困难等问题发生。因此除非确实有必要并且具备足够的技术实力支持,一般不建议开发者轻易尝试此类做法。 ```java // Java代码示例:设置Activity进入沉浸模式 public void setFullScreenImmersive() { View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值