Java 在android中检测传入视频呼叫

Java 在android中检测传入视频呼叫,java,android,reflection,Java,Android,Reflection,我想知道如何在android设备上检测来电视频?实际上,有很多关于检测来电的文档,但我找不到任何关于在android中检测本地视频来电的信息? 我找到了三星Phone.apk的源代码,找到了检测视频通话的方法localConnection.getCall().isVideoCall()或this.mPhone.getForegroundCall().isVideoCall() 但此方法需要导入com.android.internal.telephony.*,第三方应用程序不允许使用此方法。 我认

我想知道如何在android设备上检测来电视频?实际上,有很多关于检测来电的文档,但我找不到任何关于在android中检测本地视频来电的信息?
我找到了三星
Phone.apk
的源代码,找到了检测视频通话的方法
localConnection.getCall().isVideoCall()
this.mPhone.getForegroundCall().isVideoCall()
但此方法需要导入
com.android.internal.telephony.*
,第三方应用程序不允许使用此方法。
我认为调用此类需要使用反射。
你能告诉我这件事吗?



对不起,我英语说得不好,但我想你能听懂我的话。

首先,你的英语很好,所以别担心

是的,如果您认为访问电话API可以让您做到这一点,那么下面是一个直接从用户空间应用程序中使用内部电话API的示例


Android没有内置的视频通话系统。是的,API是用来访问摄像头的,但是没有本地应用来处理视频通话。您希望捕获哪些视频通话?使用谷歌聊天室的视频通话?Skype?雅虎!信使?所有这些应用程序都允许视频调用,因此如果它们提供自己的API,您需要独立支持这些应用程序。

Like@Ankit说您可以像代码中一样使用iTelephony,但您必须在文件中添加一行(您必须在项目中添加):

然后你可以这样使用它:

private Boolean isVideoCall(Context context) {

    Class<?> c;
    try {
        c = Class.forName(manager.getClass().getName());
        Method m = c.getDeclaredMethod("getITelephony");
        m.setAccessible(true);
        telephonyService = (ITelephony) m.invoke(manager);

    return telephonyService.isVideoCall();
    } catch (Exception e) {
        telephonyService = null;
        e.printStackTrace();
return false;
    }
}
private Boolean isVideoCall(上下文){
丙级;;
试一试{
c=Class.forName(manager.getClass().getName());
方法m=c.getDeclaredMethod(“getITelephony”);
m、 setAccessible(true);
电话服务=(ITelephony)m.invoke(manager);
返回telephonyService.isVideoCall();
}捕获(例外e){
电话服务=null;
e、 printStackTrace();
返回false;
}
}

只需像自动应答上的代码一样检测来电,然后检查它是否是视频。

这不是一个应答,为什么不在评论中问这个问题?这就是答案。他无法做到这一点,除非他独立地针对每个公开API的视频通话应用程序。
private Boolean isVideoCall(Context context) {

    Class<?> c;
    try {
        c = Class.forName(manager.getClass().getName());
        Method m = c.getDeclaredMethod("getITelephony");
        m.setAccessible(true);
        telephonyService = (ITelephony) m.invoke(manager);

    return telephonyService.isVideoCall();
    } catch (Exception e) {
        telephonyService = null;
        e.printStackTrace();
return false;
    }
}