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