Android aidl在Framework的使用
发布日期:2021-06-30 18:53:53
浏览次数:3
分类:技术文章
本文共 4984 字,大约阅读时间需要 16 分钟。
为何要做这个
我要在framework的PhoneWindowManager.java里面调用LightService.java里面的函数,用来做灯光的提示之类的,为何我要在PhoneWindowManager.java里面加这个呢,这里就不做讨论了,但是直接调用哪些接口是不行的,所以就引进了ipc通信,所以就有了我这篇博客,这其中有个安卓的大神朋友帮我解惑了很多问题
Aidl 和ipc通信之类的我就不讲了,我永远都是实践家,而且我的专长是linux驱动,这个东西也是现在慢慢负责公司产品framework 需要做的才去学习的
要做的文件修改如下:Changes not staged for commit: (use "git add..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: frameworks/base/Android.mk modified: frameworks/base/core/java/android/app/ContextImpl.java modified: frameworks/base/core/java/android/content/Context.java modified: frameworks/base/core/java/android/content/ContextWrapper.java modified: frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java modified: frameworks/base/services/java/com/android/server/SystemServer.java modified: frameworks/base/test-runner/src/android/test/mock/MockContext.java modified: frameworks/base/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java modified: kernel/mediatek/custom/out modified: mediatek/misc/ota_scatter.txtUntracked files: (use "git add ..." to include in what will be committed) bootable/bootloader/lk/out frameworks/base/core/java/android/content/pm/ILightManager.aidl frameworks/base/core/java/android/content/pm/LightManager.java frameworks/base/services/java/com/android/server/LightManagerService.java
第一步:加入aidl文件
frameworks/base/core/java/android/content/pm/ILightManager.aidl frameworks/base/core/java/android/content/pm/LightManager.java //在app里面这个东西是自动生成的,但是这个这个是手动写出来的
第二步:加入service相关的文件还有
frameworks/base/services/java/com/android/server/LightManagerService.java
第三步:加入注册需要的一些代码
modified: frameworks/base/Android.mk modified: frameworks/base/core/java/android/app/ContextImpl.java modified: frameworks/base/core/java/android/content/Context.java modified: frameworks/base/core/java/android/content/ContextWrapper.java modified: frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java modified: frameworks/base/services/java/com/android/server/SystemServer.java modified: frameworks/base/test-runner/src/android/test/mock/MockContext.java modified: 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;//weiqifa IStatusBarService 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=8892W/LightManagerService( 597): --------------->testLightManagerService<---------------12312345678D/ADB_SERVICES( 222): max_read_time=0.000265 max_send_time=0.001093 W/LightManagerService( 597): <--------------->testLightManagerService<--------------->12312345678
转载地址:https://linus.blog.csdn.net/article/details/50519918 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月19日 05时16分04秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
CodeForces - 675A Infinite Sequence(简单数论 细节)
2019-04-30
CodeForces - 1042B Vitamins (思维)
2019-04-30
ACM 2013 长沙区域赛 Alice's Print Service (二分 思维)
2019-04-30
ACM 2013 长沙区域赛 Collision (几何)
2019-04-30
CodeForces - 1064A Make a triangle! (简单模拟)
2019-04-30
51Nod - 1183 编辑距离 (dp)
2019-04-30
ACM 2014 鞍山区域赛 E - Hatsune Miku (dp)
2019-04-30
反向传播&梯度下降 的直观理解程序(numpy)
2019-04-30
ACM 2017 南宁区域赛 Rake it in(对抗搜索)
2019-04-30
CodeForces - 931B World Cup (思维 模拟)
2019-04-30
CodeForces - 996D Suit and Tie (暴力)
2019-04-30
ACM 2017 香港区域赛 E - Base Station Sites(二分)
2019-04-30
ACM 2018 青岛区域赛 J-Books (模拟)
2019-04-30
ACM 2016 沈阳区域赛 E - Counting Cliques (dfs)
2019-04-30
ACM 2017 北京区域赛 J-Pangu and Stones(区间dp)
2019-04-30
HDU - 5643 King's Game (约瑟夫环变式)
2019-04-30
UVA - 1452 Jump (约瑟夫环变式)
2019-04-30
POJ - 3517 And Then There Was One (约瑟夫环变式)
2019-04-30