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

时间:2012-01-13 12:36:42

标签: android skype android-package-managers

好的,我反编译了Skype的清单,以确定在通话过程中是否有任何服务或广播正在运行。 来电只有几个内部广播。此外,只有一个接收器和一个服务存在。

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

同样AudioMode不会被Skype改变(但根据开发人员想要的logcat日志,但他们不会这样做),所以我不能简单地检查它是否{{1 }}

如果Skype目前正在运行且正在通话,您有什么建议吗?

谢谢!

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

MODE_IN_CALL

3 个答案:

答案 0 :(得分: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 :(得分:0)

当Skype改变这一天的那一天(可能是在即将到来的2天内发生的更新 - 在您完成编码之前),您的代码可能会中断。因此,我认为不值得尝试这类任何东西。

对不起,这可能不是“回答”,但我认为投入时间不值得。

答案 2 :(得分:-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 developers page是否有任何已知的api