【问题标题】:Hooking mute switch (Jailbroken)挂机静音开关(越狱)
【发布时间】:2014-11-30 02:00:51
【问题描述】:

我想覆盖静音开关,以便在开关切换时创建一个新动作。 那么切换开关时触发的方法是什么?

谢谢

【问题讨论】:

    标签: ios objective-c jailbreak cydia-substrate


    【解决方案1】:

    在 SpringBoard 中钩住这个方法

    SBMediaController - (void)setRingerMuted:(char)
    

    如果您只想观察 switch 事件,那么您可以像这样使用 darwin 通知中心观察系统范围的通知 com.apple.springboard.ringerstate

    static void RingerStateChanged(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo)
    {
    }
    
    CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(),
                                    NULL,
                                    RingerStateChanged,
                                    CFSTR("com.apple.springboard.ringerstate"),
                                    NULL,
                                    CFNotificationSuspensionBehaviorDeliverImmediately);
    

    【讨论】:

    • 我搜索了很多关于如何收听达尔文通知的信息,但几乎没有找到任何东西。那你能给我举个例子吗? :)
    • 我已经读过了,但它令人困惑。我想要一个 ringerstate 通知的真实示例。另外,如果我想重写 setRingerMuted: 方法,它接受一个 char 参数,那么如何确定它是打开还是关闭?我认为它是布尔而不是字符。谢谢你帮助我:)
    • BOOL 是 char 的 typedef,所以是的,在这种情况下它是一个布尔参数。
    • 请问,你能给我一个达尔文通知观察的例子吗?
    猜你喜欢
    • 2020-10-23
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    相关资源
    最近更新 更多