Как программно позвонить по телефону?


124

Я передаю действию номер для вызова связкой

а затем, в такой активности, у меня есть кнопка для вызова этого номера, это код:

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?


пожалуйста, вставьте logcat o / p или уточните подробности ошибки ur
chikka.anddev

Ответы:


260

Вы забыли вызвать 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, как я могу это сделать, если в этом устройстве есть две sim-карты. Можно ли звонить через конкретную симку?
Динаш

3
@Dinash: взгляните на этот вопрос, на который уже был дан ответ: stackoverflow.com/questions/13231962/call-from-second-sim
Лиор

Я использовал тот же код, но не работал в Galaxy S7 edge. Это мой код Intent intentCall = new Intent (Intent.ACTION_CALL); Строка uri = "тел:" + number.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 .. Пожалуйста, помогите мне, если у вас есть решение для того же самого.
Терайя Маюр

@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 .. Пожалуйста, помогите мне, если у вас есть решение для того же самого.
Терайя Маюр

@TeraiyaMayur, это зависит от системы звонков IVRS. Это работает для меня, потому что я призываю к поддержке вымирания раннего ответа.
Dwivedi Ji

Да, вы правы, я также получаю правильный действующий номер IVR, и он отлично работает. спасибо
Терайя Маюр

7

В выбранном ответе нет проверки на разрешение зефира. Он не будет работать напрямую на устройстве Marshmallow 6.0 и выше.

Я знаю, что опоздал, но этот вопрос получил большое количество голосов, поэтому я подумал, что он поможет другим в будущем.

В устройствах с зефиром нам нужно получить разрешение времени выполнения для вызова ...

Вот пример звонка в зефире или выше.

Как позвонить в Android Marshmallow 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.