为何要做这个

我要在framework的PhoneWindowManager.java里面调用LightService.java里面的函数,用来做灯光的提示之类的,为何我要在PhoneWindowManager.java里面加这个呢,这里就不做讨论了,但是直接调用哪些接口是不行的,所以就引进了ipc通信,所以就有了我这篇博客,这其中有个安卓的大神朋友帮我解惑了很多问题

Aidl 和ipc通信之类的我就不讲了,我永远都是实践家,而且我的专长是linux驱动,这个东西也是现在慢慢负责公司产品framework 需要做的才去学习的
要做的文件修改如下:

补丁链接 说明一下是Android 4.4的

Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified:   frameworks/base/Android.mkmodified:   frameworks/base/core/java/android/app/ContextImpl.javamodified:   frameworks/base/core/java/android/content/Context.javamodified:   frameworks/base/core/java/android/content/ContextWrapper.javamodified:   frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.javamodified:   frameworks/base/services/java/com/android/server/SystemServer.javamodified:   frameworks/base/test-runner/src/android/test/mock/MockContext.javamodified:   frameworks/base/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.javamodified:   kernel/mediatek/custom/outmodified:   mediatek/misc/ota_scatter.txtUntracked files:(use "git add <file>..." to include in what will be committed)bootable/bootloader/lk/outframeworks/base/core/java/android/content/pm/ILightManager.aidlframeworks/base/core/java/android/content/pm/LightManager.javaframeworks/base/services/java/com/android/server/LightManagerService.java

第一步:加入aidl文件

    frameworks/base/core/java/android/content/pm/ILightManager.aidlframeworks/base/core/java/android/content/pm/LightManager.java //在app里面这个东西是自动生成的,但是这个这个是手动写出来的

第二步:加入service相关的文件还有

frameworks/base/services/java/com/android/server/LightManagerService.java

第三步:加入注册需要的一些代码

    modified:   frameworks/base/Android.mkmodified:   frameworks/base/core/java/android/app/ContextImpl.javamodified:   frameworks/base/core/java/android/content/Context.javamodified:   frameworks/base/core/java/android/content/ContextWrapper.javamodified:   frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.javamodified:   frameworks/base/services/java/com/android/server/SystemServer.javamodified:   frameworks/base/test-runner/src/android/test/mock/MockContext.javamodified:   frameworks/base/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java

第四步:在PhoneWindowManager.java加入调用代码

--- a/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -37,6 +37,7 @@ import android.content.IntentFilter;import android.content.ServiceConnection;import android.content.pm.ApplicationInfo;import android.content.pm.ActivityInfo;
+import android.content.pm.LightManager;import android.content.pm.PackageManager;import android.content.pm.ResolveInfo;import android.content.res.CompatibilityInfo;
@@ -252,6 +253,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {IWindowManager mWindowManager;WindowManagerFuncs mWindowManagerFuncs;PowerManager mPowerManager;
+    //AlarmManagerService mAlarmManagerService;//weiqifaIStatusBarService mStatusBarService;boolean mPreloadedRecentApps;final Object mServiceAquireLock = new Object();
@@ -1019,8 +1021,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {mPowerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);-
-mBroadcastWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"PhoneWindowManager.mBroadcastWakeLock");mEnableShiftMenuBugReports = "1".equals(SystemProperties.get("ro.debuggable"));
@@ -2256,41 +2256,19 @@ public class PhoneWindowManager implements WindowManagerPolicy {}if(keyCode == KeyEvent.KEYCODE_HDYRODENT){
-            if(down)
-            {
+            if(down){
+                LightManager a = mContext.getLightManager();
+                a.addStudent("12312345678");
+                Log.d(TAG,"--------------------------->mLightManager is null ");Log.d(TAG,"key mode m is pressed!!!!");Intent intent = new Intent("com.key.android.KEY_M_ACTION_DOWM");mContext.sendBroadcast(intent);
-            }
-            else
-            {
+            }else{Log.d(TAG,"key mode m is released!!!!");Intent intent = new Intent("com.key.android.KEY_M_ACTION_UP");mContext.sendBroadcast(intent);}}

第五步:查看日志

D/ADB_SERVICES(  222): read_data=8892
W/LightManagerService(  597): --------------->testLightManagerService<---------------12312345678
D/ADB_SERVICES(  222): max_read_time=0.000265 max_send_time=0.001093
W/LightManagerService(  597): <--------------->testLightManagerService<--------------->12312345678

Android aidl在Framework的使用相关推荐

  1. Android AIDL使用介绍(3) 浅说AIDL背后的Binder

    1.背景 在前面的博客中,我们已经学会了使用AIDL进行跨进程通信,AIDL的使用比较简单,可实际上跨进程通信是一个相当复杂的过程,例如进程A是怎么找到进程B的,如果有一个进程C冒充进程A,进程B又该 ...

  2. Android TV框架 TIF(Android TV Input Framework)入门实践

    Tamic/CSDN http://blog.csdn.net/sk719887916/article/details/53645615 做TV开发一段时间了,国内目前关于这方面的资料并不多,这里我来 ...

  3. 用Android Studio调试Framework层代码

    Android程序员不得不知的调试技巧. 本文以webview loadUrl和域名解析为例,介绍配合使用LLDB和Android Studio调试Framework代码的技巧. java 层调试 首 ...

  4. Android AIDL使用介绍(2)自定义数据类型的传递

    1.背景 默认情况下,AIDL只支持下列数据类型: Java八种基础数据类型(如 int.long.char.boolean 等); String字符串: CharSequence字符序列: List ...

  5. Android AIDL使用详解

    一.概述 AIDL 意思即 Android Interface Definition Language,翻译过来就是Android接口定义语言,是用于定义服务器和客户端通信接口的一种描述语言,可以拿来 ...

  6. ANDROID AIDL 1

    也可参考:http://buaadallas.blog.51cto.com/399160/372090 的Android AIDL(Android Interface Definition Langu ...

  7. Android知识点 200 —— framework/base/cmds 常见的am命令,input,pm命令

    文章原文:http://www.360doc.com/content/11/0510/00/4154133_115595135.shtml 返回知识列表:Android知识点list /framewo ...

  8. Android 开发者转型 “FrameWork”必不可少

    前言 如今的互联网行业可谓是风起云涌,内卷的风潮还未过去,疫情却又一次席卷而来,更是雪上加霜,许多开发者也随之对自己的前程感到迷茫,纷纷选择了躺平 但为了生活,一些 Android 开发者便开始寻求突 ...

  9. (转载)你真的理解Android AIDL中的in,out,inout么?

    前言 这其实是一个很小的知识点,大部分人在使用AIDL的过程中也基本没有因为这个出现过错误,正因为它小,所以在大部分的网上关于AIDL的文章中,它都被忽视了--或者并没有,但所占篇幅甚小,且基本上都是 ...

最新文章

  1. 近期热门领域新鲜数据集汇总!
  2. Sublime Text 3 python 配置
  3. HDUOJ---1863畅通工程
  4. Spring4.x新特性
  5. “美登杯”上海市高校大学生程序设计 C. 小花梨判连通 (并查集+map)
  6. mysql逗号分隔函数_mysql split 函数(用逗号分隔)的实现
  7. PL/SQL之JOB用法 (定时跑数据)
  8. 将一个字段分成3个 php,整理几个方法
  9. mysql数据库导入操作_mysql 导入数据库 命令操作
  10. 系统学习深度学习(三十三)--Prioritized Replay DQN
  11. 12306排队是什么意思_12306火车网上订票排队是什么意思
  12. Kotlin教程,从入门到精通
  13. android系统体系结构,Android系统的五层体系结构解析
  14. mysql数据库木马查杀_服务器木马后门怎么查杀
  15. c语言贪吃蛇代码(菜单功能后续补充)
  16. XCode6如何创建Category
  17. delete 和 delete []的真正区别+析构函数
  18. cdh6.3安装以及整合spark2、flink1.9
  19. WebStrom终端使用git 出现 'git'不是内部或外部命令,也不是可运行的程序 或批处理文件
  20. 三、pytest接口自动化之pytest中setup/teardown,setup_class/teardown_class讲解

热门文章

  1. TCP/IP、Http的区别
  2. 一道C#类型转换的思考题
  3. My new iMac 27
  4. quantaxis使用docker安装,解决了一个很奇特的问题
  5. Jsp用于交换数据的4个map结构
  6. Readhat中挂载yum源
  7. 谷歌虚拟服务器申请,【美国podserver.info】免费300M虚拟主机空间申请使用教程
  8. 单例模式在JDK应用的源码分析
  9. 解决:pip警告!DEPRECATION: The default format will switch to columns in the future.
  10. linux生产环境下安装anaconda总结