实体home键像虚拟按键那样有正常功能:
虚拟按键的底层键值都是2,不过上层键值keycode在这SystemUI//opa/res/layout/home.xml
已经定义了,<com.android.systemui.statusbar.policy.KeyButtonView里面有个属性
systemui:keyCode="3"
而在frameworks下的KeyEvent里面这个3,就是KEYCODE_HOME
实测实体按键home的上层键值122,就是KEYCODE_MOVE_HOME,而这个值在PhoneWindowManager里面就没有定义使用,KEYCODE_HOME这个用到了,
所以思路是,直接在底层就把键值对应的名字改成KEYCODE_HOME
在frameworks/base/data/keyboards/Generic.kl
key 102 HOME
注意!在还没改之前,这个值是底层键值,是getevent看到的,而上层键值对应的是原来的MOVE_HOME
所以先用getevent转化十进制查看底层键值再修改名字,那么keycode也会变
Remake不生效,需要./device/droi/pu181_ysf_all2_hw_zl/mtk-kpd.kl 修改
虚拟按键主要是三个res/layout/back.xml:24: systemui:keyCode="4"
res/layout/recent_apps.xml:24: systemui:keyCode="187"
res/layout/home.xml:23: systemui:keyCode="3"
横屏通知锁屏不显示通知,所有应用默认不显示通知(不仅仅在锁屏界面),或者指定应用可显示:
vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
里面有个监听旋转的类OnConfigurationChangedListener
里面一个监听方法onConfigurationChanged
if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
Settings.Secure.putInt(mView.getContext().getContentResolver(),
Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS,1);
}else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
Settings.Secure.putInt(mView.getContext().getContentResolver(),
Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS,0);
}
思路就是横屏时,系统层把通知显示关掉,横屏时再打开。
主要方法是Settings.Secure.putInt(mView.getContext().getContentResolver(),
Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS,1);
第一个参数需要获取Context,第三个参数1是打开0是关闭,都是这样的
所有应用默认不显示通知,不仅仅在锁屏界面
override/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
public void systemReady() {
if(mFirstBoot){
PackageManager packageManager = mContext.getPackageManager();
List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);
try {
if (packageInfos != null) {
for (int i = 0; i < packageInfos.size(); i++) {
String packName = packageInfos.get(i).packageName;
if(packName.equals("com.MobileTornado.Main")){
continue;
}else{
disableAppNotification(packName);
}
Log.e(TAG, "allPackage: ------------------------------------" + packName);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
用到的方法
private void disableAppNotification(String packageName){
//NotificationManager mNotificationManager =(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
android.app.INotificationManager mNotificationManager = android.app.INotificationManager.Stub.asInterface(ServiceManager.getService(Context.NOTIFICATION_SERVICE));
try {
int uid = getPackageUid(packageName, 0, UserHandle.USER_SYSTEM);
Slog.i("yu","-----------------disableAppNotification: " + packageName + ", uid = " + uid);
mNotificationManager.setNotificationsEnabledForPackage(packageName, uid, false);
} catch (Exception e) {
Slog.e("yu", "--------------------disableAppNotification: " + e);
}
}