Android frameworks实现navigationbar显示隐藏

由于前面的文章已经提供过如何自定义接口,这里就不在赘述了,只提最重要的几步,在frameworks/base/core/java/android/app/customized/ICustomizedService.aidl中定义controlNavigationBarVisibility接口,

package android.app.customized;
 
interface ICustomizedService{
    void controlNavigationBarVisibility(boolean isControl);
}

在frameworks/base/core/java/android/app/customized/CustomizedManager.java中定义接口

package android.app.customized;
 
import android.util.Log;
import android.content.Context;
import android.content.Intent;
import android.os.Binder;
import android.os.RemoteException;
import android.provider.Settings;
import java.io.IOException;
import android.os.ServiceManager;
import android.os.IBinder;
import java.util.List;
import android.app.ActivityManager;
import android.graphics.Bitmap;
 
 
public class CustomizedManager{
    private static final String TAG="CustomizedManager";
    private static final boolean DBG=true;
    
    private static ICustomizedService mService;
    private final Context mContext;
 
 
    public CustomizedManager(Context context){
        mContext = context;
        mService = ICustomizedService.Stub.asInterface(
                ServiceManager.getService("customized"));
    }
    private static ICustomizedService getService(){
        if (mService != null) {
            return mService;
        }
        
        IBinder b = ServiceManager.getService("customized");
        mService = ICustomizedService.Stub.asInterface(b);
        return mService;
    }
 
    public void controlNavigationBarVisibility(boolean isCotrol){
	    ICustomizedService service = getService();
        try {
            service.controlNavigationBarVisibility(isControl);
        } catch (RemoteException e) {}
    } 

 
 
}

 在frameworks/base/services/core/java/com/android/server/customized/CustomizedService.java中实现这个接口

controlNavigationBarVisibility(boolean isControl),代码如下:

    public void controlNavigationBarVisibility(boolean isControl){
        long jh = Binder.clearCallingIdentity();
        Intent i = new Intent();
        if(isControl){
            i.setAction("com.azt.hidebar");
        }else{
            i.setAction("com.azt.unhidebar");
        }
        mContext.sendBroadcast(i);
        Binder.restoreCallingIdentity(jh);
    }

在frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java接收广播

首先在PhoneWindowManager的init方法中加入

IntentFilter filter = new IntentFilter();
filter.addAction("com.azt.hidebar");
filter.addAction("com.azt.unhidebar");  //IntentFilter加进去
Intent intent = context.registerReceiver(mDockReceiver, filter);

然后去mDockReceiver中对收到intent后进行处理

 BroadcastReceiver mDockReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("com.azt.hidebar")) {
		mStatusBarHeight =0;
		// Height of the navigation bar when presented horizontally at bottom
		mNavigationBarHeightForRotation[mPortraitRotation] = 0;
		mNavigationBarHeightForRotation[mUpsideDownRotation] = 0;
		mNavigationBarHeightForRotation[mLandscapeRotation] = 0;
		mNavigationBarHeightForRotation[mSeascapeRotation] = 0; 

		// Width of the navigation bar when presented vertically along one side
		mNavigationBarWidthForRotation[mPortraitRotation] = 0;
		mNavigationBarWidthForRotation[mUpsideDownRotation] = 0;
		mNavigationBarWidthForRotation[mLandscapeRotation] = 0;
		mNavigationBarWidthForRotation[mSeascapeRotation] = 0;


	    } else if (intent.getAction().equals("com.azt.unhidebar")) {//gaodz add

		// Height of the navigation bar when presented horizontally at bottom
		mNavigationBarHeightForRotation[mPortraitRotation] =
		mNavigationBarHeightForRotation[mUpsideDownRotation] =
			mContext.getResources().getDimensionPixelSize(com.android.internal.R.dimen.navigation_bar_height);
		mNavigationBarHeightForRotation[mLandscapeRotation] =
		mNavigationBarHeightForRotation[mSeascapeRotation] = mContext.getResources().getDimensionPixelSize(
			com.android.internal.R.dimen.navigation_bar_height_landscape);

		// Width of the navigation bar when presented vertically along one side
		mNavigationBarWidthForRotation[mPortraitRotation] =
		mNavigationBarWidthForRotation[mUpsideDownRotation] =
		mNavigationBarWidthForRotation[mLandscapeRotation] =
		mNavigationBarWidthForRotation[mSeascapeRotation] =
			mContext.getResources().getDimensionPixelSize(com.android.internal.R.dimen.navigation_bar_width);

	    }
    }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值