Programlı olarak nasıl telefon araması yapılır?


123

Bir aktiviteye bir paketle aramak için numara veriyorum

ve sonra, böyle bir aktivitede, bu numarayı aramak için bir düğmem var, bu kod:

callButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(bundle.getString("mobilePhone")));
            }
        }); 

Bir sorun var çünkü düğmeye bastığımda hiçbir şey olmuyor ...

Neyi yanlış yapıyorum?

PD: Android 1.5 uyumlu proje kullanıyorum ... belki telefon görüşmesi 1.5 ile uyumsuzdur?


pls logcat o / p veya ayrıntılı ur hata ayrıntılarını yapıştırın
chikka.anddev

Yanıtlar:


259

StartActivity'yi çağırmayı unuttunuz. Şöyle görünmeli:

Intent intent = new Intent(Intent.ACTION_CALL);

intent.setData(Uri.parse("tel:" + bundle.getString("mobilePhone")));
context.startActivity(intent);

Kendi başına bir niyet, bir şeyi tanımlayan basit bir nesnedir. Hiçbir şey yapmaz.

Manifestinize ilgili izni eklemeyi unutmayın:

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

Merhaba @Lior, bu cihazın dual-sim olması durumunda nasıl yapabilirim. Belirli bir sim üzerinden arama yapmak mümkün mü?
Dinash

3
@Dinash: Zaten yanıtlanmış şu soruya bir göz atın: stackoverflow.com/questions/13231962/call-from-second-sim
Lior 13

Aynı kodu kullandım ancak Galaxy S7 kenarında çalışmıyorum. Bu benim kodum Intent intentCall = new Intent (Intent.ACTION_CALL); String uri = "tel:" + number.trim (); intentCall.setData (Uri.parse (URI)); if (ActivityCompat.checkSelfPermission (getApplicationContext (), Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {startActivity (intentCall); }
AngelJanniee

Bu simülatör, fiziksel cihaz olmadan arama yapmak için kullanılabilir mi
user3754136

24

Bunu telefonumda denedim ve mükemmel çalışıyor.

Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:900..." ));
startActivity(intent);

Bu izni manifest dosyasına ekleyin.

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

1
sayı 1689, 3,2,1,1 gibidir. Sorun alıyorum, sadece 1689 olacak ... Lütfen aynı çözüm için bir çözümünüz varsa bana yardım edin.
Teraiya Mayur

@TeraiyaMayur önce sayısal olmayan karakterleri kaldırabilirsiniz. Eğer telefon numarasına sahip Yani olarak String number = "1689,,3,2,1,1yapmaknubmer = "tel:" + number.replaceAll("[^0-9]", "");
Walk of

@Walk, gibi özel sembollerle aramak istediğimiz bir problemdir ,*. Rakamlar arasında olmalılar. Bir emülatörde doğru çalışır, ancak bir cihazda ek semboller ve rakamlar bırakır.
CoolMind

13
 Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+198+","+1+","+1)); 
             startActivity(callIntent);

birden çok sıralı çağrı için

Bu, DTMF çağrı sistemleri için kullanılır. Çağrı kesilirse, numaralar arasında daha fazla "" geçirmeniz gerekir.


Dwivedi Ji: sayı 1689,, 3,2,1,1 gibidir. Sorun alıyorum, sadece 1689 olacak ... Lütfen aynı çözüm için bir çözümünüz varsa bana yardım edin.
Teraiya Mayur

@TeraiyaMayur, IVRS çağrı sistemine bağlıdır. Benim için iş, çünkü benim yok olma desteğimi erken yanıt alıyorum.
Dwivedi Ji

Evet haklısınız, ayrıca uygun bir IVR numarası alıyorum ve iyi çalışıyor. teşekkürler
Teraiya Mayur



2

Burada size faaliyetinizden nasıl telefon görüşmesi yapabileceğinizi göstereceğim. Bir arama yapmak için bu kodu uygulamanıza yazmanız gerekir.

try {
    Intent my_callIntent = new Intent(Intent.ACTION_CALL);
    my_callIntent.setData(Uri.parse("tel:"+phn_no));
    //here the word 'tel' is important for making a call...
    startActivity(my_callIntent);
} catch (ActivityNotFoundException e) {
    Toast.makeText(getApplicationContext(), "Error in your phone call"+e.getMessage(), Toast.LENGTH_LONG).show();
}

1
@Astor bunu çok net bir şekilde tanımladım, ve bununla zaten puanlar aldım, bu da cevabımın bazı insanlar için diğerinden daha iyi olduğu anlamına geliyor.
Pir Fahim Shah

2

Bu izin gerektirmez.

val intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:+123456"))
startActivity(intent)

Veya

val intent = Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", "+123456", null))
startActivity(intent)

Ancak bir diyalog daha gösterir (telefonu sadece bir kez mi yoksa her zaman mı aramak istediğinizi sorar). Bu nedenle ACTION_CALL, bir izinle kullanmak daha iyi olacaktır (bkz. İptal edilmiş android.permission.CALL_PHONE izni ).


0
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 
   final Button button = (Button) findViewById(R.id.btn_call);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            String mobileNo = "123456789";
            String uri = "tel:" + mobileNo.trim();
            Intent intent = new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse(uri));
            startActivity(intent);
        }
    });*
 }

0

Kotlin'de arayan varsa

    val  uri = "tel:+800******"
    val call_customer_service = Intent(Intent.ACTION_CALL)
    call_customer_service.setData(Uri.parse(uri))
    startActivity(call_customer_service)

Diğer bazı çözümler gibi, android.permission.CALL_PHONEizin gerektirir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.