2012-01-13 5 views
8

좋아, Skype의 매니페스트를 디 컴파일하여 통화 도중 실행되는 서비스 또는 브로드 캐스트가 있는지 확인했습니다. 들어오는 호출에 대한 내부 브로드 캐스트가 몇 개 있습니다. 또한 하나의 수신기와 하나의 서비스 만 존재합니다.Skype 전화가 현재 Android에서 활성화되어 있는지 확인하는 방법

내 앱으로 실행중인 모든 서비스를 모니터링했지만 SkypeMainService는 통화 중이 아닌 경우에도 항상 실행됩니다.

AudioMode도 skype에 의해 변경되지 않습니다 (하지만 devcat가 원하는 logcat-logs에 따라 변경되지는 않지만 단지 수행하지 않습니다). 따라서 단순히 MODE_IN_CALL인지 확인할 수 없습니다.

Skype가 현재 실행 중이고 통화 중인지 확인하는 방법에 대한 제안이 있으십니까?

감사합니다.

/편집 : 활동 등의 간략한 개요 :

<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를 통해 분명히 감지 할 수 있습니다 ... –

+0

그래, 저도 처음 생각했습니다. 그러나 Skype는 실제로 두 가지 활동 : 스플래시 화면 활동 및 주요 활동을 선언했습니다. MainActivity는 모든 것을 처리하며 심지어 호출을 처리합니다 ... – Force

답변

2

좋아 공지의 API에 대한 스카이프 developers page을 확인 마침내 PhoneManager

3)를 사용하여, 정말의 희망 omeone은 유용한 답을 제공합니다. 그러나, 나는 코멘트에 르우벤의 조언을 포착하고이 방법을했다 : 결과가 com.skype.raider.Main 동일한 경우

/** 
* 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(); 
} 

가 그럼 난 확인합니다. 또한 활성 Skype 통화가 없지만 기본 앱이 열려 있으면 true를 반환합니다.

모든 도움을 주셔서 감사합니다. 특히 루벤!

편집 :에 당신의 다음과 같은 권한이 필요합니다 매니페스트

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

저를 위해 작동하지 않습니다. 백그라운드 서비스에서이 코드를 사용했습니다. 그것에 대한 제안이 있습니까? –

0

스카이프 (지금부터 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) 교환 데이터에 대한 휴대 전화 상태를 확인

+0

나는 완전히 그것에 대해 알고 있습니다. 그러나 나는 미래의 솔루션이 아니라 현재의 소프트웨어에 대한 솔루션을 요구했다. 업데이트로 무엇을 의미합니까? 다음 2 일 이내에 발표 될 업데이트가 있습니까? – Force

-1

당신이 그것을 추측의 기회를 증가 할 수있는 몇 가지가있다

+0

아니요, 전에 말했듯이 Skype 프로세스가 실행 중인지 (** 항상 실행 중 **) 추가로 ** 해당 사이트에 Android API가 없는지 확인하는 것은 의미가 없습니다. – Force

+0

또한 질문에 썼 듯이 전화 상태는 변경되지 않습니다. – Force