由于公司项目是在全屏下的,所有界面都是全屏,唯有弹出提示框的时候,会出现系统的导航栏,由于是平板,导航栏信息比较多,该项目属于永不让用户进入原系统的项目。所以有导航栏,就让用户有了机会进入后台。
本今天在网上找了很多资料,试了很多方法,终于可以把导航栏的图表隐藏掉,点击事件也禁用了。唯有不足之处就是下面还有一个黑条,不管了,讲究用了。
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了。