如何确定 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 上处于活动状态的主要内容,如果未能解决你的问题,请参考以下文章