2011-05-10 19 views
25

Arama yaptığımı bilmek istiyorum.Android'de bir görüşmede olup olmadığımı nasıl öğrenebilirim?

Bir arama olduğum o zaman (servis bölümü açıktır) hizmetini başlatın. Bunu nasıl yaparım?

Ben servisini çağırmanız gerekir çağrı devam ederken

... Ben bunu nasıl habersiz? Herhangi bir yardım? Sen alıcıyı yayın ihtiyacım

+4

Bir "telefon görüşmesi", "yöntem çağrısı" veya başka bir aramada mı demek istiyorsunuz? (Eşleşen çağrı? Perde çağrısı? Lauren Bacall? :-)) –

+0

evet onun telefon görüşmesi ... – Rockin

cevap

53

... apaçık beyan yayın alıcısı olarak

...

<receiver android:name=".PhoneStateBroadcastReceiver"> 
     <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE"/>  
     </intent-filter> 
</receiver> 

Ayrıca

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

yayın alıcısı sınıf ... kullanımları-iznini bildirmelidir. ..

package x.y; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 

public class PhoneStateBroadcastReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
     telephonyManager.listen(new CustomPhoneStateListener(context), PhoneStateListener.LISTEN_CALL_STATE); 

    } 

} 

Ve bir sınıf

package x.y; 
import android.content.Context; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 

public class CustomPhoneStateListener extends PhoneStateListener { 

    //private static final String TAG = "PhoneStateChanged"; 
    Context context; //Context to make Toast if required 
    public CustomPhoneStateListener(Context context) { 
     super(); 
     this.context = context; 
    } 

    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 
     super.onCallStateChanged(state, incomingNumber); 

     switch (state) { 
     case TelephonyManager.CALL_STATE_IDLE: 
      //when Idle i.e no call 
      Toast.makeText(context, "Phone state Idle", Toast.LENGTH_LONG).show(); 
      break; 
     case TelephonyManager.CALL_STATE_OFFHOOK: 
      //when Off hook i.e in call 
      //Make intent and start your service here 
      Toast.makeText(context, "Phone state Off hook", Toast.LENGTH_LONG).show(); 
      break; 
     case TelephonyManager.CALL_STATE_RINGING: 
      //when Ringing 
      Toast.makeText(context, "Phone state Ringing", Toast.LENGTH_LONG).show(); 
      break; 
     default: 
      break; 
     } 
    } 
} 
+2

kontrol edeyim ve cevap olarak işaretleyeyim .. evetway teşekkürler – Rockin

+0

iam bu uygulamayı yüklerken UDF – Rockin

+0

bir sorun bulamıyorum ve telefon alır ayıklama modunda bir çağrı ... kontrolü OnReceive – Rockin

26

TelephonyManager.getCallState() döner bir

  • CALL_STATE_IDLE
  • CALL_STATE_OFFHOOK
  • CALL_STATE_RINGING

görmeyecek o kavalcısı en çok daha az kod daha kapsamlı çözüm

+1

Bence bu daha iyi bir çözüm. İlk durumda, her telefon durumu değişikliğine yeni bir dinleyici eklenir. – Goo

+0

+1 Bu yöntemin var olduğunu bilmiyordum. Ancak bu yöntem, yalnızca belirli bir zamanda çağrı durumunu bilmek istiyorsak yardımcı olacaktır, ancak telefon çağrı durumlarını her zaman izlemede yardımcı olmayacaktır. –

+4

((TelephonyManager) getSystemService (Context.TELEPHONY_SERVICE)). GetCallState() acemi için –

İlgili konular