禁用应用中Android系统的导航栏(特别是平板)

     由于公司项目是在全屏下的,所有界面都是全屏,唯有弹出提示框的时候,会出现系统的导航栏,由于是平板,导航栏信息比较多,该项目属于永不让用户进入原系统的项目。所以有导航栏,就让用户有了机会进入后台。

    本今天在网上找了很多资料,试了很多方法,终于可以把导航栏的图表隐藏掉,点击事件也禁用了。唯有不足之处就是下面还有一个黑条,不管了,讲究用了。

 

public class StatusUtils {
//disable为是否禁用导航栏true为禁用
 public static void statusBarDisable(boolean disable,Context mContext) {    
        
        try {  
          int DISABLE_NAVIGATION = StatusBarManager.DISABLE_EXPAND
                  | StatusBarManager.DISABLE_BACK
                  | StatusBarManager.DISABLE_NOTIFICATION_ICONS
                  | StatusBarManager.DISABLE_NOTIFICATION_ALERTS
                  | StatusBarManager.DISABLE_NOTIFICATION_TICKER
                  | StatusBarManager.DISABLE_SYSTEM_INFO
                  | StatusBarManager.DISABLE_NAVIGATION
                  | StatusBarManager.DISABLE_CLOCK;
          int DISABLE_NONE = 0x00000000;  
          //获得ServiceManager类  
          Class<?> ServiceManager = Class  
             .forName("android.os.ServiceManager");  
            
          //获得ServiceManager的getService方法  
          Method getService = ServiceManager.getMethod("getService", java.lang.String.class);  
            
          //调用getService获取RemoteService  
          Object oRemoteService = getService.invoke(null,"statusbar");  
            
          //获得IStatusBarService.Stub类  
          Class<?> cStub = Class  
             .forName("com.android.internal.statusbar.IStatusBarService$Stub");  
          //获得asInterface方法  
          Method asInterface = cStub.getMethod("asInterface", android.os.IBinder.class);  
          //调用asInterface方法获取IStatusBarService对象  
          Object oIStatusBarService = asInterface.invoke(null, oRemoteService);  
          //获得disable()方法  
          Method disableMethod = oIStatusBarService.getClass().getMethod("disable",int.class,IBinder.class,String.class);  
          //调用disable()方法  
          if(disable){  
             disableMethod.invoke(oIStatusBarService,DISABLE_NAVIGATION,new Binder(),mContext.getPackageName());     
          }else{  
             disableMethod.invoke(oIStatusBarService,DISABLE_NONE,new Binder(),mContext.getPackageName());     
          }             
        }catch (Exception e) {            
          Log.e("status", e.toString(), e);           
        }  
     }  
}
 这用了反射机制,调用StatusManager 类的disable方法,将导航的功能禁用。该类是@hide的,对外是不可见,不可用,所以只能用反射了。

接下来要做的就是给应用添加权限

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

在manifest中添加android:sharedUserId="android.uid.system"属性

最后应用要签名:用signapk
java -jar signapk.jar certificate.pem key.pk8 your-app.apk  your-signed-app.apk

最后就Ok了。

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值