Як здійснити телефонний дзвінок програмно?


123

Я передаю в деякий час число, яке потрібно дзвонити пакетом

а потім у такій діяльності у мене є кнопка для дзвінка на цей номер, це код:

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

Щось не так, бо коли я натискаю кнопку, нічого не відбувається ...

Що я роблю неправильно?

PD: Я використовую проект, сумісний з Android 1.5 ... можливо, телефонний дзвінок несумісний з 1.5?


pls вставити logcat o / p або розробити детальну інформацію про помилку ур
chikka.anddev

Відповіді:


259

Ви забули викликати startActivity. Це повинно виглядати так:

Intent intent = new Intent(Intent.ACTION_CALL);

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

Сам намір - це просто предмет, який щось описує. Це нічого не робить.

Не забудьте додати відповідний дозвіл у свій маніфест:

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

Привіт @Lior, як я можу зробити на випадок, якщо пристрій має подвійний сим. Чи можна телефонувати через певний сим?
Дінаш

3
@Dinash: Подивіться на це вже відповів на запитання: stackoverflow.com/questions/13231962/call-from-second-sim
Lior

Я використовував той самий код, але не працював у краю Galaxy S7. Це мій код Intent intentCall = новий Намір (Intent.ACTION_CALL); Рядок uri = "tel:" + число.trim (); intentCall.setData (Uri.parse (uri)); якщо (ActivityCompat.checkSelfPermission (getApplicationContext (), Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {startActivity (intentCall); }
AngelJanniee

Чи може цей симулятор використовуватись для здійснення дзвінків без фізичного пристрою
user3754136

24

Спробував це на своєму телефоні, і він працює чудово.

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

Додайте цей дозвіл у файл маніфесту.

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

1
число, як 1689,, 3,2,1,1. Я отримую питання, це буде лише 1689 р. Будь ласка, допоможіть мені, якщо у вас є рішення для того ж.
Teraiya Mayur

@TeraiyaMayur ви можете спочатку видалити будь-які нечислові символи. Так що якщо у вас є номер телефону , як String number = "1689,,3,2,1,1зробитиnubmer = "tel:" + number.replaceAll("[^0-9]", "");
Прогулянка

@Walk, проблема в тому, що ми хочемо телефонувати за допомогою спеціальних символів, таких як ,*. Вони повинні бути серед цифр. На емуляторі він працює правильно, але на пристрої він скидає додаткові символи та цифри.
CoolMind

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

для декількох замовлених дзвінків

Це використовується для DTMF викликових систем. Якщо дзвінок перебуває в краплі, вам слід пройти більше "," між номерами.


Двіведі Джі: число, як 1689,, 3,2,1,1. Я отримую питання, це буде лише 1689 р. Будь ласка, допоможіть мені, якщо у вас є рішення для того ж.
Teraiya Mayur

@TeraiyaMayur, це залежить від системи викликів IVRS. Його робота для мене через те, що я закликав підтримати вимирання, негайно реагувати.
Dwivedi Ji

Так, ви праві, я також отримую належний дійсний номер IVR, і він працює чудово. дякую
Teraiya Mayur

7

У вибраній відповіді немає дозволу на отримання зефіру. Він не працюватиме безпосередньо в зефірі 6.0 або вище.

Я знаю, що я запізнююсь, але це питання має великий голос, тому я думав, що це допоможе іншим у майбутньому.

У зефірних пристроях нам потрібно отримати дозвіл на час виклику ...

Ось приклад для дзвінка в зефір або вище.

Як зателефонувати в Android зефір 6.0 або вище



2

Тут я покажу вам, як можна телефонувати за допомогою своєї діяльності. Щоб здійснити дзвінок, потрібно занести цей код у свою програму.

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 Я визначив це дуже чітко, я вже отримав бали через це, це означає, що моя відповідь - це те, що краще, ніж інше для деяких людей.
Пір Фахім Шах

2

Для цього не потрібно дозволу.

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

Або

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

Але він показує ще одне діалогове вікно (запитання, чи потрібно дзвонити телефоном просто один раз чи завжди). Тому було б краще використовувати ACTION_CALLз дозволом (див. Відкликаний дозвіл android.permission.CALL_PHONE ).


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

Якщо хтось шукає в Котліні

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

Як і деякі інші рішення, він вимагає android.permission.CALL_PHONEдозволу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.