8

好的,我反编译了 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">
4

3 回答 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,但主应用程序已打开。

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

编辑:您将需要清单中的以下权限

<uses-permission android:name="android.permission.GET_TASKS"/>
于 2012-01-22T14:04:35.147 回答
0

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

对不起,这可能不是一个“答案”,但我认为花时间在这上面不值得。

于 2012-01-20T09:24:41.170 回答
-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

于 2012-01-21T18:03:47.847 回答