Como faço para abrir o discador com o número de telefone exibido?

193

Não preciso ligar para o número de telefone, só preciso que o discador seja aberto com o número de telefone já exibido. O Intentque devo usar para conseguir isso?

Nik
fonte

Respostas:

531

Duas maneiras de conseguir isso.

1) Precisa iniciar o discador via código, sem a interação do usuário.

Você precisa Action_Dial,

Use o código abaixo para abrir o Discador com o número especificado

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:0123456789"));
startActivity(intent); 

O prefixo 'tel:' é necessário ; caso contrário, a seguinte exceção será lançada: java.lang.IllegalStateException: Não foi possível executar o método da atividade.

Action_Dial não requer nenhuma permissão.

Se você deseja iniciar a chamada diretamente sem a interação do usuário , você pode usar a ação Intent.ACTION_CALL. Nesse caso, você deve adicionar a seguinte permissão no seu AndroidManifest.xml:

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

2) Precisa que o usuário clique na sequência Phone_Number e inicie a chamada.

android:autoLink="phone" 

Você precisa usar o TextView com a propriedade abaixo.

android: autoLink = "phone" android: linksClickable = "true" uma propriedade textView

Você não precisa usar a intenção ou obter permissão dessa maneira.

AAnkit
fonte
9
Isso é ótimo e que difere do que Intent.ACTION_CALL por que não chamar imediatamente
Amt87
ACTION_DIAL requer a permissão ou apenas ACCESS_CALL?
Marc Plano-Lesay
1
Isso também funciona com os números de telefone da Dinamarca :) Você não precisa adicionar +45 antes do número. Ele funciona bem apenas analisar o número de telefone
ymerdrengene
1
Tenho um problema com o botão Voltar depois de abrir o discador com nova intenção. Posso voltar ao meu aplicativo apenas com o pressionamento do botão 3 de volta (ele mostra várias telas do discador que não abri - o discador em si, cria uma nova tela de contato, favoritos). Alguém sabe como voltar ao aplicativo pressionando apenas um botão Voltar?
kashlo
2
2012 ... bons velhos tempos. É politicamente correto 2018, as grandes empresas vendem dados do usuário e nossos aplicativos precisam lidar com a burocracia do Android apenas para NÃO suportar chamadas SMS e telefônicas.
21418 Josh
52

Bastante tarde na resposta, mas se você tem um TextViewnúmero no qual está mostrando o número de telefone, não precisa lidar com nenhuma intenção, basta usar o atributo XML android:autoLink="phone"e o sistema operacional iniciará automaticamente uma ACTION_DIALIntenção.

ashishduh
fonte
Abordagem muito rápida!
Taslim Oseni
7

Ok, será uma resposta extremamente tarde para esta pergunta. Mas aqui está apenas uma amostra, se você quiser fazer isso no Kotlin .

val intent = Intent(Intent.ACTION_DIAL)
intent.data = Uri.parse("tel:<number>")
startActivity(intent)

Pensei que poderia ajudar alguém.

gprathour
fonte
2

Como o @ashishduh mencionado acima, o uso android:autoLink="phonetambém é uma boa solução. Mas esta opção tem uma desvantagem, não funciona com todos os comprimentos de números de telefone. Por exemplo, um número de telefone de 11 números não funcionará com esta opção. A solução é prefixar seus números de telefone com o código do país.

Exemplo:

08034448845 não vai funcionar

mas +2348034448845vai

Ojonugwa Jude Ochalifu
fonte
1
<TextView
 android:id="@+id/phoneNumber"
 android:autoLink="phone"
 android:linksClickable="true"
 android:text="+91 22 2222 2222"
 />

É assim que você pode abrir o número atribuído à etiqueta EditText diretamente no discador.

saurabh yadav
fonte
1

Adicione permissão no manifesto:

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

Botão Make ou qualquer exemplo de widget: btnCall

btnCall.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent callIntent = new Intent(Intent.ACTION_DIAL);
        callIntent.setData(Uri.parse("tel: +98990*******");
        startActivity(callIntent);

    }
});
Pouria Hemati
fonte
esta resposta está correta, mas esta resposta não corresponde à pergunta.
lua