2017-08-26 9 views
9

Android uygulamamın belirli bir telefon numarasının tek bir zil sesiyle çalışıp çalışmadığını anlamasını istiyorum (yani numarayı ararım, ilk zil sesinin yanımda olmasını bekledikten sonra kapatıyorum). Eğer yüzük yoksa (yani telefonun bağlantısı kesilmişse) ben de bilmek isterim. Telefon numarasında bir ping var. Bu mümkün olursa, nasıl yapılabilir?Tek bir zil sesiyle nasıl programlanabilir ve aradığım hattın kapalı olup olmadığını nasıl anlarım?

+1

Bil diye söylüyorum, dial tonu genellikle aradığınız numara ile ilgisi yoktur, sen kendi çizgi bağlandığı bildirmek için arama başlamadan önce sesler kişinin kendi satırında ses atıfta . "Tek bir zil sesiyle" ve "eğer yüzük yoksa" demek istediğini düşünüyorum. Ayrıca, bir telefonu aradığınızda, bazen telefonun bağlantısı kesilirse, SIT'yi ve "Aradığınız çevirdiğiniz numara servis dışı" mesajını vermeden önce iki kez çalar. Birkaç vaka daha var. Kaynak: Bir çağrı merkezinde çalışıyorum. –

+0

Teşekkürler! Düzeltmeleri takdir ediyorum :) – Frank

+0

Belki de yanlış okuyorum, ama _incoming_ aramaları için bu kod değil mi? Benim düşüncem çağrı gönderiyor ... – Frank

cevap

0

Sözünü ettiğiniz seslere 'Geribaz' denir. 'Çevir Sesi', aramada olmayan bağlı bir telefonu alırken duyduğunuz sestir.

Android Telephony uygulamaların sesi çağırmak dinlemek erişmek SDK'yı, böylece izleme ringback (some people kesmek ile gelen ve outgoing çağrı ses dinleme başarı bildirdin rağmen) NDK başvurmadan sürece mümkün görünmüyor vermeyin sınıflar

Yaklaşımınız ile ilgili sorun, ses almayı başarırsanız bile, bir duraklama için hatta sesin sesini dinlemeniz gerekir. Bu, bazı sağlayıcıların geçersiz durumları ve hatta başkaları için otomatik iletileri okuduğu için güvenilir değildir. Kullanıcının kendi zil seslerini (şarkı gibi) yüklemesine izin ver.

Sizin için en iyi seçenek, TelephonyManager.EXTRA_STATE_RINGING başladığında dinlemek ve daha sonra askıda kalmadan önce belirli bir süre beklemek. CALL_STATE_OFFHOOK gibi diğer çeviriler durumunuzla alakalı değil.

public void onReceive(Context context, Intent intent) { 
    if (timer == null && TelephonyManager.EXTRA_STATE_RINGING.equals(intent.getStringExtra(TelephonyManager.EXTRA_STATE))) { 
     timer = new Handler(); //member variable 
     timer.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       hangUp(); 
      } 
     }, 1500); //arbitrary delay 
    } 
}