Android 4.0与4.2 全屏实现方式并且在设置里可实时控制

本文介绍了在Android 4.0和4.2系统中实现全屏显示的方法,并讲解如何在系统设置中实时控制这一功能。涉及到的关键步骤包括:在SystemUI中添加抽象函数,注册BroadcastReceiver,StatusBar中处理广播消息,以及通过发送特定广播控制状态栏的显示和隐藏。对于平板设备,还需要添加控制控件并利用service发送广播。
摘要由CSDN通过智能技术生成


一、在 SystemUI 中添加抽象函数(frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUI.java)

public abstract class SystemUI {
    public Context mContext;
    public abstract void start();
    public abstract void onReceive(String action);//添加抽象函数,注意只要继承了SystemUI的实例也都需要重写onReceive方法,否则会编译出错
    protected void onConfigurationChanged(Configuration newConfig) {
    }
 
    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
    }
}


注意在如下文件中需要重写onReceive
Android 4.0
frameworks/base/packages/SystemUI/src/com/android/systemui/power/PowerUI.java

Anroid 4.2
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
frameworks/base/packages/SystemUI/src/com/android/systemui/media/RingtonePlayer.java
frameworks/base/packages/SystemUI/src/com/android/systemui/power/PowerUI.java

即在类里面多添加一条如下代码即可

public void onReceive(String action){}


二、在 SystemUIService 中注册 BroadcastReceiver (frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUIService.java)

先定义action string

public static final String ACTION_DISPLAY_STATUS_BAR = "android.intent.action.DISPLAY_STATUS_BAR"; 
public static final String ACTION_HIDE_STATUS_BAR = "android.intent.action.HIDE_STATUS_BAR";

 

注册广播代码

@Override
    public void onCreate() {
        // Pick status bar or system bar.
        IWindowManager wm = IWindowManager.Stub.asInterface(
                ServiceManager.getService(Context.WINDOW_SERVICE));
        try {
                Log.d(TAG, "*** canStatusBarHide = " + wm.canStatusBarHide() + " ***");
            SERVICES[0] = wm.canStatusBarHide()
                    ? R.string.config_statusBarComponent
                    : R.string.config_systemBarComponent;
        } catch (RemoteException e) {
            Slog.w(TAG, "Failing checking whether status bar can hide", e);
        }
 
        final int N = SERVICES.length;
        mServices = new SystemUI[N];
        for (int i=0; i<N; i++) {
            Class cl = chooseClass(SERVICES&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值