好的,我反编译了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">
解决方法
好的,我真的希望有人会提供一个有用的答案.但是,我在评论中提到了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"/>