1

I am trying to use Java reflection to access CallManager and detect the call state which I always get the call idle. Please help me on this. Btw I use the following code to access CallManager:

try{ 
    class classCallManager = class.forname("com.android.internal.telephony.CallManager");
    Method methodGetInstance = classCallManager .getDeclaredMethod("getInstance");
    methodGetInstance.setAccessible(true);
    Object objectCallManager = methodGetInstance.invoke(null);
    Method methodGetActiveFgCallState = classCallManager.getDeclaredMethod("getActiveFgCallState");
}catch (Exception e) {}
Lyuben Todorov
  • 13,987
  • 5
  • 50
  • 69
user853341
  • 149
  • 2
  • 12

1 Answers1

1

I can confirm that unfortunately even trying to get active fg call fails: the return value is always false

    val classCallManagerName = "com.android.internal.telephony.CallManager"

    log log "get class name manager"

    val classCallManager = Class.forName(classCallManagerName)

    future {
      var msec = 15000

      val sleeptime = 500

      while (
        msec > 0
      ) {
        log log "get method instance"

        //getDeclaredMethod
        val methodGetInstance = classCallManager.getMethod("getInstance")

        log log "set method get instance accessible"

        methodGetInstance.setAccessible(true)

        log log "invoke get instance"

        val objectCallManager = methodGetInstance.invoke(null) //null for static methods

        log log "getMethod hasActiveFgCall"

        //getActiveFgCallState
        val hasActiveFgCall = classCallManager.getMethod("hasActiveFgCall")

        log log "hasActiveFgCall setAccessible(true)"

        hasActiveFgCall.setAccessible(true)

        log log "has active fg call: " + hasActiveFgCall.invoke(objectCallManager)

        Thread.sleep(sleeptime)

        msec -= sleeptime
      }
    }

note that the code is in Scala

George Pligoropoulos
  • 2,919
  • 3
  • 33
  • 65