Como fazer uma ligação telefônica programaticamente?


123

Estou passando para uma atividade o número para ligar em um pacote

e então, nessa atividade, tenho um botão para ligar para esse número, este é o código:

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

Algo está errado, porque quando eu pressiono o botão, nada acontece ...

O que estou fazendo de errado?

PD: Estou usando um projeto compatível com Android 1.5 ... talvez a ligação seja incompatível com a 1.5?


os pls colam o logcat o / p ou detalhes de erro de ur elaborados
chikka.anddev

Respostas:


259

Você esqueceu de chamar startActivity. Deve ficar assim:

Intent intent = new Intent(Intent.ACTION_CALL);

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

Uma intenção por si só é simplesmente um objeto que descreve alguma coisa. Não faz nada.

Não se esqueça de adicionar a permissão relevante ao seu manifesto:

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

Olá, @Lior, como eu poderia fazer, caso o dispositivo tenha dual-sim. É possível fazer chamadas através de um sim específico?
Dinash

3
@Dinash: Dê uma olhada nesta questão já respondeu: stackoverflow.com/questions/13231962/call-from-second-sim
Lior

Eu usei o mesmo código, mas não estou trabalhando na borda do Galaxy S7. Este é o meu código 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

Este simulador pode ser usado para fazer chamadas sem dispositivo físico
user3754136

24

Tentei isso no meu telefone e funciona perfeitamente.

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

Adicione essa permissão no arquivo de manifesto.

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

1
número é como 1689, 3,2,1,1. Estou recebendo problema, será apenas 1689 .. Por favor, me ajude se você tiver alguma solução para o mesmo.
Teraiya Mayur

@TeraiyaMayur, você pode remover primeiro os caracteres não numéricos. Então se você tem número de telefone como String number = "1689,,3,2,1,1fazernubmer = "tel:" + number.replaceAll("[^0-9]", "");
Caminhada

@ Walk, um problema é que queremos ligar com símbolos especiais como ,*. Eles devem estar entre dígitos. Em um emulador, ele funciona direito, mas, em um dispositivo, descarta símbolos e dígitos adicionais.
CoolMind 26/09/19

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

para várias chamadas ordenadas

Isso é usado para sistemas de chamada DTMF. Se a chamada for descartada, você deve passar mais "," entre os números.


Dwivedi Ji: número é como 1689,, 3,2,1,1. Estou recebendo problema, será apenas 1689 .. Por favor, me ajude se você tiver alguma solução para o mesmo.
Teraiya Mayur

@TeraiyaMayur, depende do sistema de chamadas IVRS. Seu trabalho para mim por causa do meu chamado apoio à extinção exige uma resposta precoce.
precisa saber é o seguinte

Sim, você está certo, eu também recebo o número IVR válido válido e funciona bem. obrigado
Teraiya Mayur

6

Na resposta selecionada, não há verificação de permissão para marshmallow. Não funcionará diretamente no dispositivo marshmallow 6.0 ou superior.

Sei que estou muito atrasado, mas essa pergunta tem um grande voto, então pensei que ajudaria outras pessoas no futuro.

Em dispositivos de marshmallow, precisamos ter permissão de tempo de execução para chamadas ...

Aqui está um exemplo para fazer uma chamada no marshmallow ou acima.

Como fazer chamadas no Android Marshmallow 6.0 ou superior



2

Aqui mostrarei como você pode fazer uma ligação telefônica a partir de sua atividade. Para fazer uma ligação, você deve inserir esse código no seu aplicativo.

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
@ Stan defini-o com muita clareza, e já consegui pontos com isso, o que significa que minha resposta é melhor do que a outra para algumas pessoas.
Pir Fahim Shah

2

Isso não requer permissão.

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

Ou

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

Mas mostra mais uma caixa de diálogo (perguntando se você deseja ligar para o telefone apenas uma vez ou sempre). Portanto, seria melhor usar ACTION_CALLcom uma permissão (consulte Permissão revogada 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

Se alguém procura em Kotlin

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

Como algumas outras soluções, requer android.permission.CALL_PHONEpermissão.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.