Android aidl在Framework的使用
为何要做这个
我要在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的使用相关推荐
- Android AIDL使用介绍(3) 浅说AIDL背后的Binder
1.背景 在前面的博客中,我们已经学会了使用AIDL进行跨进程通信,AIDL的使用比较简单,可实际上跨进程通信是一个相当复杂的过程,例如进程A是怎么找到进程B的,如果有一个进程C冒充进程A,进程B又该 ...
- Android TV框架 TIF(Android TV Input Framework)入门实践
Tamic/CSDN http://blog.csdn.net/sk719887916/article/details/53645615 做TV开发一段时间了,国内目前关于这方面的资料并不多,这里我来 ...
- 用Android Studio调试Framework层代码
Android程序员不得不知的调试技巧. 本文以webview loadUrl和域名解析为例,介绍配合使用LLDB和Android Studio调试Framework代码的技巧. java 层调试 首 ...
- Android AIDL使用介绍(2)自定义数据类型的传递
1.背景 默认情况下,AIDL只支持下列数据类型: Java八种基础数据类型(如 int.long.char.boolean 等); String字符串: CharSequence字符序列: List ...
- Android AIDL使用详解
一.概述 AIDL 意思即 Android Interface Definition Language,翻译过来就是Android接口定义语言,是用于定义服务器和客户端通信接口的一种描述语言,可以拿来 ...
- ANDROID AIDL 1
也可参考:http://buaadallas.blog.51cto.com/399160/372090 的Android AIDL(Android Interface Definition Langu ...
- Android知识点 200 —— framework/base/cmds 常见的am命令,input,pm命令
文章原文:http://www.360doc.com/content/11/0510/00/4154133_115595135.shtml 返回知识列表:Android知识点list /framewo ...
- Android 开发者转型 “FrameWork”必不可少
前言 如今的互联网行业可谓是风起云涌,内卷的风潮还未过去,疫情却又一次席卷而来,更是雪上加霜,许多开发者也随之对自己的前程感到迷茫,纷纷选择了躺平 但为了生活,一些 Android 开发者便开始寻求突 ...
- (转载)你真的理解Android AIDL中的in,out,inout么?
前言 这其实是一个很小的知识点,大部分人在使用AIDL的过程中也基本没有因为这个出现过错误,正因为它小,所以在大部分的网上关于AIDL的文章中,它都被忽视了--或者并没有,但所占篇幅甚小,且基本上都是 ...
最新文章
- 近期热门领域新鲜数据集汇总!
- Sublime Text 3 python 配置
- HDUOJ---1863畅通工程
- Spring4.x新特性
- “美登杯”上海市高校大学生程序设计 C. 小花梨判连通 (并查集+map)
- mysql逗号分隔函数_mysql split 函数(用逗号分隔)的实现
- PL/SQL之JOB用法 (定时跑数据)
- 将一个字段分成3个 php,整理几个方法
- mysql数据库导入操作_mysql 导入数据库 命令操作
- 系统学习深度学习(三十三)--Prioritized Replay DQN
- 12306排队是什么意思_12306火车网上订票排队是什么意思
- Kotlin教程,从入门到精通
- android系统体系结构,Android系统的五层体系结构解析
- mysql数据库木马查杀_服务器木马后门怎么查杀
- c语言贪吃蛇代码(菜单功能后续补充)
- XCode6如何创建Category
- delete 和 delete []的真正区别+析构函数
- cdh6.3安装以及整合spark2、flink1.9
- WebStrom终端使用git 出现 'git'不是内部或外部命令,也不是可运行的程序 或批处理文件
- 三、pytest接口自动化之pytest中setup/teardown,setup_class/teardown_class讲解
热门文章
- TCP/IP、Http的区别
- 一道C#类型转换的思考题
- My new iMac 27
- quantaxis使用docker安装,解决了一个很奇特的问题
- Jsp用于交换数据的4个map结构
- Readhat中挂载yum源
- 谷歌虚拟服务器申请,【美国podserver.info】免费300M虚拟主机空间申请使用教程
- 单例模式在JDK应用的源码分析
- 解决:pip警告!DEPRECATION: The default format will switch to columns in the future.
- linux生产环境下安装anaconda总结