2013-11-26 46 views
14

使用adb shell或设备上的终端仿真器,进入这将清除所有通知(需要su在哪里可以找到关于Android“服务调用”shell命令的信息?

service call notification 1 

这将发送短信(不需要su

service call isms 5 s16 "PhoneNumber" i32 0 i32 0 s16 "BodyText" 

在哪里可以我了解更多关于service call?我发现this question,并感谢答案的细节,以什么意思。但我在哪里可以找到关于notification 2可能试图呼叫的方法的信息?

运行service call不完整,印刷这种用法:

Usage: service [-h|-?] 
     service list 
     service check SERVICE 
     service call SERVICE CODE [i32 INT | s16 STR] ... 
Options: 
    i32: Write the integer INT into the send parcel. 
    s16: Write the UTF-16 string STR into the send parcel. 

我跑service list,它与我的设备78级的服务,包括ismsnotification和大多数服务回来后会打印什么似乎是一个命名空间( com.android.internal.telephony.ISms对于ismsandroid.app.INotificationManager对于notification)。我怎样才能使用这些信息来了解我可以用这些服务做些什么?

+0

也问在http://android.stackexchange.com/q/57778/1302 –

+0

是的,由我。我不确定哪个社区能够更好地回答我的问题。我认为两个社区都可以从中受益。 –

回答

7

我的第一个答案在这里,所以我希望对你有用。

解释这个小谜让我使用android 4.3.1。您的情况下,链接可能是必不可少的。向下滚动java代码至第669行。正在等待您的TRANSACTION块与com.android.internal.telephony.ISms服务严格相关,并且可能您的答案是您可以做的更多。

在你的情况下,你正在调用TRANSACTION_sendText。说明位于第673行,您可以在这里找到

static final int TRANSACTION_sendText = (android.os.IBinder.FIRST_CALL_TRANSACTION + 4); 

代码的最后一部分包含数字“4”。每个TRANSACTION编号+ 1 =正确的一个。这就是为什么service call isms 5负责sendText而不是sendMultipartText

相同的规则适用于所有服务。

我相信您现在可以了解如何检查TRANSACTION的通知服务。好开心。

+1

您链接到的java文件不是官方源代码树的一部分。它是从AIDL文件生成的 - https://android.googlesource.com/platform/frameworks/base/+/android-4.3.1_r1/telephony/java/com/android/internal/telephony/ISms.aidl。我觉得它更容易解析 –

+0

@AlexP这是缺少的重点 - 你需要做的这个信息是编译后的文件中的*。源AIDL文件根本没有事务编号,因为它们是在编译时生成的。 –

+0

@GlennMaynard,我不会错过任何东西。我不仅可以自己计算文本文件中的行数 - 这就是AIDL编译过程中相关(查找事务编号)的整个范围。 –

9

这是我的帖子关于Calling Android services from ADB shell。它包含一个小型bash脚本,用于自动为特定设备下载适当版本的服务源代码,然后解析它以找出所有方法的交易代码。

+1

这真的是答案!太糟糕了,花了我2​​年才找到你的剧本! 对于其他人要知道,每个服务呼叫都是AOS/API在很大程度上依赖的,呼叫号码越低,在AOS版本之间越容易兼容。对于更高的号码,例如“服务呼叫电话87 i32 0 i32 1”(将网络设置为仅使用2G GSM)在所有其他设备上最有可能失败,而不是预期的设备。 – not2qubit

相关问题