如何在Android上查看Skype通话是否正在进行中

8
好的,我反编译了Skype的清单文件,以查找在通话期间是否有任何服务或广播运行。 只有几个用于呼入电话的内部广播。此外,只存在一个接收器和一个服务。
我使用我的应用程序监视所有正在运行的服务,但即使没有通话,SkypeMainService也始终在运行。
此外,音频模式并未被Skype更改(但根据logcat日志,开发人员想要这样做,但他们并没有这样做),因此我不能简单地检查它是否为MODE_IN_CALL。
您有什么建议,如何找出Skype当前是否正在运行并具有活动呼叫?
谢谢!
/edit:Activities等的简要概述:
<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">

1
我不使用Skype,但如果有一个活动的通话,那么SkypeActivity(或者它被称为什么)不就是前台活动吗?这显然可以通过ActivityManager检测到... - Reuben Scratton
是的,那也是我的第一反应 - 但 Skype 实际上只声明了两个活动:一个启动屏幕活动和一个主要活动。MainActivity 做了所有的事情,甚至处理通话... - Force
3个回答

2

好的,我希望你能提供有用的答案。然而,我在评论中采纳了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。如果没有活动的Skype通话,但主要应用程序是打开的,这也将返回true。

感谢所有的帮助,特别是Reuben!

编辑:您需要在清单中添加以下权限

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

1
对我来说它不起作用,我在我的后台服务中使用了这段代码。有什么建议吗? - Pratik Butani

0

如果Skype在未来两天内的更新中更改了任何内容(可能会在您完成编码之前),则您的代码可能会出现问题。因此,我认为尝试这种方法不值得。

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


我完全意识到这一点。然而,我要求的是当前软件的解决方案,而不是未来可行的解决方案。你所说的更新是什么意思?有计划在接下来的两天内发布更新吗? - Force

-1

有一些事情可以增加你猜测的机会:

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 开发者页面以获取任何已知的API


不,就像我之前说的那样,检查Skype进程是否正在运行是没有意义的(它始终在运行),而且该网站上没有Android API - Force
正如我在问题中所写的那样,手机状态没有改变。 - Force

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接