通知栏按钮锁[E开源]

帮同学写的一段简单的小程序

锁住通知栏按钮:
通知栏按钮
有什么用呢?当然是隐藏通知栏图标咯.....
锁住后就无法展开通知栏,也就可以达到隐藏通知栏图标的目的咯~
隐藏通知栏图标干什么?请自己自行想象....

使用方法(虽然只有两步,但可能有点麻烦):

1.运行程序,出现“捕获按钮”窗口
捕获按钮
如图所示,吧鼠标放在通知栏图标上,然后.... 猛地吹气 -_-||
别告诉我你没有麦克风....

2.确认捕获后,出现主界面,可以操作了^_^
通知栏按钮锁 主界面
界面有点简陋,请多包涵

下载地址(含E源码):
http://www.91files.com/?ERNUL530GPZLC7BPTAE1


===========================


原理:
调用了一个WinAPI函数—— EnableWindow
位于user32.dll内,有两个参数
第一个为整数型,为要进行操作的窗口句柄
第二个也是整数型,为要进行的操作:
0为禁止窗口组件,非0为取消禁止
返回一个整数,指示当前此窗口的状态
(0或8,0是禁止,8是没禁止?<-仅供参考)

E调用代码:



.版本 2

.DLL命令 禁止窗口, 整数型, "user32.dll", "EnableWindow"
    .参数 窗口句柄, 整数型, , 窗口句柄
    .参数 标识符, 整数型, , 非零允许,零禁止


下载地址(含E源码):
http://www.91files.com/?ERNUL530GPZLC7BPTAE1

<think>嗯,用户需要开发一个简单的SystemUI,要求包含滑动屏、SIM PIN解页面、PIN解界面以及系统导航栏。首先,我得弄清楚Android系统下SystemUI的基本结构。SystemUI通常负责状态栏、导航栏、屏等系统级别的界面,所以需要了解这些组件是如何在Android中实现的。 用户提到的滑动屏,这应该是类似手机上的滑动解界面。可能需要继承或自定义一个View,处理触摸事件,比如滑动距离超过某个阈值就触发解。但还需要考虑如何与系统的屏服务交互,比如调用KeyguardManager的相关方法。 然后是SIM PIN解,这涉及到SIM卡的状态检测。当SIM卡被锁定时,系统通常会弹出输入PIN的界面。这里可能需要注册一个广播接收器,监听SIM卡状态的变化,比如ACTION_SIM_STATE_CHANGED。当检测到SIM卡需要解时,显示一个输入框让用户输入PIN,并通过TelephonyManager的supplyPinReportResult方法提交PIN码进行验证。 PIN解页面应该是在设备启动后或者从睡眠中唤醒时显示的界面。这里可能需要使用KeyguardView,或者自定义一个Activity,处理用户输入,并与KeyguardManager进行交互,比如确认解后调用setKeyguardEnabled(false)之类的操作。同时要注意安全性,确保输入不被恶意应用截获。 系统导航栏通常包括返回、主页、最近任务等按钮。在Android中,导航栏的实现可能涉及SystemUI的NavigationBarView,需要处理触摸事件,更新按钮状态,并根据系统配置(比如手势导航或传统三键导航)调整布局。可能需要自定义一个ViewGroup,包含这些按钮,并注册到WindowManager中,作为系统覆盖层显示。 接下来要考虑的是权限和系统级应用的问题。SystemUI作为系统应用,需要相应的权限,比如SYSTEM_ALERT_WINDOW,可能还需要签名,才能访问某些API。如果用户是在定制ROM或拥有系统签名的情况下开发,这会容易些,否则可能需要模拟器或root权限。 另外,各个模块之间的交互也需要考虑。例如,当SIM PIN解完成后,如何通知系统继续启动流程;滑动解后如何隐藏屏界面,显示主屏幕。可能需要使用服务或者广播来进行通信。 还有界面布局的问题,每个界面(屏、SIM PIN输入、导航栏)都需要对应的XML布局文件,处理不同屏幕尺寸和方向的变化。对于滑动屏,可能需要使用自定义View,处理滑动手势,并通过属性动画来反馈用户的滑动操作。 在安全性方面,处理PIN码输入时要确保输入内容不被泄露,使用安全的数据结构存储临时输入,及时清除内存中的敏感信息。SIM PIN的提交需要使用TelephonyManager的安全方法,避免明文传输。 测试也是一个挑战,特别是涉及到系统级的功能,可能需要频繁重启设备或模拟器,或者在真机上调试。需要确保各个组件在不同情况下都能正确响应,比如SIM卡状态变化、设备唤醒、屏幕旋转等。 可能还需要参考Android开源项目(AOSP)中SystemUI的源码,了解官方是如何实现这些功能的,从中借鉴结构和设计模式。例如,屏界面可能位于Keyguard模块中,导航栏在NavigationBar模块里。 最后,集成所有这些功能到一个简单的SystemUI中,可能需要分模块逐步实现,先完成滑动屏,再处理SIM PIN解,接着是PIN解页面,最后添加系统导航栏。每个模块单独测试通过后,再整合到一起,处理可能的冲突和交互问题。</think>好的,我将分步骤为您介绍如何实现一个简单的Android SystemUI,包含滑动屏、SIM PIN验证、PIN解页面和系统导航栏功能。以下是具体实现思路: --- ### 一、系统权限准备 1. 在`AndroidManifest.xml`中声明系统权限: ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.systemui" android:sharedUserId="android.uid.systemui"> <!-- 需要系统签名 --> <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> ``` --- ### 二、滑动屏实现 1. **创建屏布局** `res/layout/lock_screen.xml`: ```xml <LinearLayout android:id="@+id/lock_container" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="滑动解" android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> ``` 2. **手势监听逻辑**: ```java public class LockScreenView extends LinearLayout { private float startY; @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: startY = event.getY(); return true; case MotionEvent.ACTION_UP: if (startY - event.getY() > 100) { // 滑动距离阈值 KeyguardManager km = (KeyguardManager) context.getSystemService(KEYGUARD_SERVICE); km.requestDismissKeyguard(); // 请求解除屏 } return true; } return super.onTouchEvent(event); } } ``` --- ### 三、SIM PIN解实现 1. **检测SIM状态**: ```java TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); int simState = tm.getSimState(); if (simState == TelephonyManager.SIM_STATE_PIN_REQUIRED) { showSimPinDialog(); } ``` 2. **创建PIN输入对话框**: ```java private void showSimPinDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); EditText pinInput = new EditText(this); builder.setView(pinInput) .setPositiveButton("确定", (dialog, which) -> { String pin = pinInput.getText().toString(); boolean success = tm.supplyPin(pin); // 提交PIN码 if (!success) showError(); }); builder.show(); } ``` --- ### 四、系统导航栏实现 1. **创建导航栏布局** `res/layout/navigation_bar.xml`: ```xml <LinearLayout android:layout_width="match_parent" android:layout_height="48dp" android:orientation="horizontal"> <ImageButton android:src="@drawable/ic_back" android:onClick="onBackPressed"/> <ImageButton android:src="@drawable/ic_home" android:onClick="onHomePressed"/> <ImageButton android:src="@drawable/ic_recent" android:onClick="onRecentPressed"/> </LinearLayout> ``` 2. **绑定窗口管理器**: ```java WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.MATCH_PARENT, 48, // 高度 WindowManager.LayoutParams.TYPE_NAVIGATION_BAR, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT ); wm.addView(navBarView, params); // 添加导航栏视图 ``` --- ### 五、关键注意事项 1. **系统签名**:必须使用平台签名编译APK 2. **窗口层级**:使用`TYPE_SYSTEM_OVERLAY`或`TYPE_NAVIGATION_BAR` 3. **生命周期管理**:在Service中维护屏和导航栏视图 4. **输入安全**:使用`InputMethodManager`管理软键盘 --- ### 六、扩展建议 1. 参考AOSP源码: - 屏实现:`frameworks/base/packages/SystemUI/src/com/android/systemui/keyguard` - 导航栏实现:`frameworks/base/packages/SystemUI/src/com/android/systemui/navigationbar` 2. 使用`KeyguardService` API管理认证流程 需要更详细的代码示例或架构设计说明,可以告诉我具体模块的细化需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值