有时候做项目,需要隐藏NavigationBar,但有时候因为其他信号干扰出现自主弹出NavigationBar的情况,最终决定,在增加个快捷方式来控制NavigationBar显示。
一.增加快捷方式按钮
frameworks\base\packages\SystemUI\res\values\config.xml
<string name="quick_settings_tiles_default" translatable="false">
wifi,bt,hidbar,dnd,flashlight,rotation,battery,cell,airplane,cast
</string>
frameworks\base\packages\SystemUI\res\values\strings.xml中添加
<!-- QuickSettings: HidBar tile [CHAR LIMIT=NONE] -->
<string name="quick_settings_Bar_label">BAR</string>
<!-- QuickSettings: BAR (off) [CHAR LIMIT=NONE] -->
<string name="quick_settings_Bar_off">Bar is Hid</string>
<!-- QuickSettings: BAR (on) [CHAR LIMIT=NONE] -->
<string name="quick_settings_Bar_on">BAR is Show</string>
2.创建按钮并添加事件广播,通过广播控制NavigationBar,在
frameworks\base\packages\SystemUI\src\com\android\systemui\qs\tiles\下创建文件
HidBarTile.java:
/*
* Copyright (c) 2016, The Android Open Source Project
* Contributed by the Paranoid Android Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.qs.tiles;
import android.app.Notification;
import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.provider.Settings;
import android.widget.Switch;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.R;
import com.android.systemui.qs.QSHost;
import com.android.systemui.plugins.qs.QSTile.BooleanState;
import com.android.systemui.qs.tileimpl.QSTileImpl;
public class HidBarTile extends QSTileImpl<BooleanState> {
private boolean headsetState;
private String ACTION_HIDE_NAVIGATION ="com.android.systemui.qs.tiles.HidBarTile";
public boolean isHeadsetState() {
return headsetState;
}
public void setHeadsetState(boolean headsetState) {
this.headsetState = headsetState;
}
public HidBarTile(QSHost host) {
super(host);
}
@Override
public BooleanState newTileState() {
return new BooleanState();