2011-01-27 5 views
85

jestem przechodząc do aktywności numer zadzwonić przez wiązkęJak programowo wykonać połączenie telefoniczne?

a następnie w takiej działalności, mam przycisk, aby zadzwonić na ten numer, jest to kod:

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

coś jest źle, ponieważ po naciśnięciu przycisku nic się nie dzieje ...

co robię źle?

PD: używam projektu zgodnego z Androidem 1.5 ... może połączenie telefoniczne jest niezgodne z wersją 1.5?

+0

pls wklej logcat O/P lub opracować ur szczegóły błędu –

Odpowiedz

203

Zapomniałeś zadzwonić do funkcji startActivity. Powinno to wyglądać następująco:

Intent intent = new Intent(Intent.ACTION_CALL); 

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

Intencja sama w sobie jest po prostu obiektem opisującym coś. Nic nie robi.

Nie zapomnij dodać odpowiednie pozwolenie na swoim manifeście:

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

Hi @Lior jak mogę zrobić w sprawie, że urządzenie posiada dual-SIM. Czy możliwe jest nawiązanie połączenia za pośrednictwem konkretnej karty SIM? – Dinash

+1

@ Dinash: Spójrz na to już odpowiedział na pytanie: http://stackoverflow.com/questions/13231962/call-from-second-sim – Lior

+0

Mieć moje upvote, mój dobry przyjaciel samarytanin. – Josh

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

dla wielokrotności zamówił rozmowę

ten jest wykorzystywany do systemów wywołujących DTMF. Jeśli połączenie zostanie wtedy przerwane, powinieneś przekazać więcej "," między liczbami.

+0

Dwivedi Ji: liczba jest jak 1689,, 3,2,1,1. Mam problem, to będzie tylko 1689. Proszę mi pomóc, jeśli masz jakieś rozwiązanie tego samego. –

+0

@TeraiyaMayur, To zależy od systemu połączeń IVRS. Jego praca dla mnie z powodu mojego wsparcia wymuszania wymarcia wymaga wczesnej odpowiedzi. –

+0

Tak, masz rację, również otrzymuję prawidłowy prawidłowy numer IVR i działa dobrze. dzięki –

17

Próbowałem tego na moim telefonie i działa idealnie.

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

Dodaj to uprawnienie w pliku manifestu.

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

liczba jest jak 1689,, 3,2,1,1. Mam problem, to będzie tylko 1689. Proszę mi pomóc, jeśli masz jakieś rozwiązanie tego samego. –

+0

@TeraiyaMayur możesz najpierw usunąć wszelkie nie-numeryczne znaki. Więc jeśli masz numer telefonu jako 'String number =" 1689,, 3,2,1,1' do 'nubmer =" tel: "+ number.replaceAll (" [^ 0-9] "," ");' – Walk

2

Tutaj pokażę ci, jak wykonać połączenie telefoniczne ze swojej aktywności. Aby nawiązać połączenie, musisz odłożyć ten kod w swojej aplikacji.

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(); 
} 
+0

przyjęta odpowiedź jest taka sama jak Twoja, więc dlaczego ją opublikowałeś? – ArtemStorozhuk

+1

@Astor zdefiniowałem to bardzo wyraźnie, już zdobyłem punkty przez to, co oznacza, że ​​moja odpowiedź jest trochę lepsza niż druga dla niektórych ludzie. –

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

W wybranej odpowiedzi, nie ma sprawdzić zgody prawoślazu. Nie będzie działać bezpośrednio w urządzeniu Marshmallow 6.0 lub nowszym.

Wiem, że jestem już za późno, ale to pytanie ma duży głos, więc pomyślałem, że pomoże to innym w przyszłości.

W urządzeniach lekarski musimy wziąć uruchomić pozwolenia czasowego na wezwanie ...

Oto przykład, aby rozmowy w prawoślazu lub powyżej.

How to make call in android marshmallow 6.0 or above