如何确定 Skype 通话当前是不是在 Android 上处于活动状态

Posted

技术标签:

【中文标题】如何确定 Skype 通话当前是不是在 Android 上处于活动状态【英文标题】:How to find out if a Skype call is currently active on Android如何确定 Skype 通话当前是否在 Android 上处于活动状态 【发布时间】:2012-02-09 15:54:41 【问题描述】:

好的,我反编译了 Skype 的清单,以了解通话期间是否有任何服务或广播正在运行。 来电只有少数内部广播。也只有一个接收器和一个服务存在。

我使用我的应用监控所有正在运行的服务,但 SkypeMainService 始终在运行,即使不在通话中也是如此。

另外AudioMode 不会被Skype 更改(但根据开发人员想要的logcat-logs,但他们只是不这样做),所以我不能简单地检查它是否是MODE_IN_CALL

您有什么建议可以查明 Skype 当前是否正在运行并且正在进行通话?

谢谢!

/edit:活动的简要概述等:

<activity android:name="com.skype.raider.Main">
<activity-alias android:name="com.skype.raider.ui.SplashScreenActivity" android:targetActivity="com.skype.raider.Main">
<receiver android:name="com.skype.MainReceiver" android:enabled="true" android:exported="false">
   <action android:name="android.intent.action.BOOT_COMPLETED" />
   <action android:name="android.intent.action.MEDIA_MOUNTED" />
   <action android:name="android.intent.action.SEARCH" />
   <action android:name="android.intent.action.CALL_PRIVILEGED" />
   <action android:name="com.skype.raider.INCOMING_GSM_CALL" />
   <action android:name="com.skype.raider.ON_GSM_CALL" />
   <action android:name="com.skype.raider.intent.action.request_sync" />
</receiver>
<service android:name="com.skype.MainService">

【问题讨论】:

我不使用 Skype,但如果有一个 active 呼叫,那么 SkypeActivity(或其他任何名称)不会是前台活动吗?显然可以通过 ActivityManager 检测到... 是的,这也是我的第一个想法——但 Skype 实际上只声明了两个活动:启动屏幕活动和主活动。 MainActivity 做所有事情,甚至处理调用... 【参考方案1】:

好的,我真的希望有人能提供有用的答案。不过,我在评论中采纳了 Reuben 的建议,做了这个方法:

/**
 * Gets the current activity
 * 
 * @param context
 *            A context to use
 * @return The Activity name
 */
public static String getCurrentTopActivity(Context context) 
    ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> RunningTask = mActivityManager.getRunningTasks(1);
    ActivityManager.RunningTaskInfo ar = RunningTask.get(0);
    return ar.topActivity.getClassName().toString();

然后我检查结果是否等于com.skype.raider.Main。如果有 no 活动的 Skype 通话,但主应用程序已打开,这也将返回 true。

感谢所有帮助,尤其是鲁本!

编辑:您需要在清单中获得以下权限

<uses-permission android:name="android.permission.GET_TASKS"/>

【讨论】:

它对我不起作用,我在后台服务中使用了此代码。有什么建议吗?【参考方案2】:

你可以做一些事情来增加你猜到它的机会:

1) 检查应用程序是否正在运行:

ActivityManager activityManager = (ActivityManager) this.getSystemService( ACTIVITY_SERVICE );
    List<RunningAppProcessInfo> procInfos = actvityManager.getRunningAppProcesses();
    for(int i = 0; i < procInfos.size(); i++)
        if(procInfos.get(i).processName.equals("com.android.browser")) 
            Toast.makeText(getApplicationContext(), "Browser is running", Toast.LENGTH_LONG).show();
        
    

2) 使用PhoneManager检查手机状态以进行数据交换

3) 最后检查 Skype developers page 是否有任何已知的 api

【讨论】:

不,就像我之前说的,检查 Skype 进程是否正在运行是没有意义的(它一直在运行),此外还有该网站上没有 Android API 正如我在问题中所写,手机状态没有改变。【参考方案3】:

在 Skype 更改其中任何内容的那一天(可能是在 2 天后即将到来的更新中 - 在您完成编码之前),您的代码可能会中断。所以我认为这种尝试不值得。

很抱歉,这可能不是一个“答案”,但我认为为此投入时间不值得。

【讨论】:

我完全清楚这一点。但是,我要求为当前软件提供解决方案,而不是面向未来的解决方案。更新是什么意思?是否有宣布在未来两天内发布的更新?

以上是关于如何确定 Skype 通话当前是不是在 Android 上处于活动状态的主要内容,如果未能解决你的问题,请参考以下文章

开始Skype通话时如何处理UI?

在 Skype for Business 中获取通话时间

RTMP 指南流式传输诸如 Skype 视频通话之类的内容

Skype for Business 通话记录

C# Skype API 视频通话

如何在iPhone上安装Skype?