faça uma chamada, clique em um botão

Estou a tentar fazer uma chamada quando carrego num botão no android.
((Button)findViewById(R.id.button1)).setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
    String phno="10digits";

    Intent i=new Intent(Intent.ACTION_DIAL,Uri.parse(phno));
    startActivity(i);
  }
});

mas quando corro e carrego no botão dá-me o erro

ERROR/AndroidRuntime(1021): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.CALL dat=9392438004 }
Como posso resolver este problema?

Author: Vadim Kotov, 2011-03-23

13 answers

Você deu a permissão no arquivo manifesto

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

E dentro da tua actividade

  Intent callIntent = new Intent(Intent.ACTION_CALL);
    callIntent.setData(Uri.parse("tel:123456789"));
    startActivity(callIntent);
Avisa-me se encontrares algum problema.
 142
Author: Shaista Naaz, 2011-03-23 11:06:04

Existem dois intentos para ligar / iniciar a chamada: ACTION_CALL e ACTION_DIAL.

ACTION_DIAL só irá abrir o dialer with the number preenchido, mas permite ao utilizador realmente c all or reject the call. ACTION_CALL ligará imediatamente para o número e requer uma permissão extra .

Por isso certifica-te que tens a permissão.
uses-permission android:name="android.permission.CALL_PHONE"

No teu AndroidManifest.xml

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.dbm.pkg"
    android:versionCode="1"
    android:versionName="1.0">

    <!-- NOTE! Your uses-permission must be outside the "application" tag
               but within the "manifest" tag. -->

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

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name">

        <!-- Insert your other stuff here -->

    </application>

    <uses-sdk android:minSdkVersion="9" />
</manifest> 
 16
Author: AndroidGeek, 2015-06-01 07:44:20

Mude o seu texto para String phno="tel:10digits"; e tente de novo.

 12
Author: Harshad, 2012-03-30 09:36:29
[[2]] nenhum dos acima funcionou assim com um pouco de remendar aqui está o código que fez para mim
        Intent i = new Intent(Intent.ACTION_DIAL);
        String p = "tel:" + getString(R.string.phone_number);
        i.setData(Uri.parse(p));
        startActivity(i);
 11
Author: kenwen, 2011-11-06 16:02:26
Também estava a divertir-me imenso com isto. Eu não percebi que além da permissão extra você precisa adicionar "tel:" no texto que tem o número nele. Isto é o que o meu parece depois de o pôr funcional. Espero que isto ajude.

@Override
public void onClick(View v) {
  Intent intent = new Intent(Intent.ACTION_DIAL);
  String temp = "tel:" + phone;
  intent.setData(Uri.parse(temp));

  startActivity(intent);
}
 5
Author: JCrooks, 2016-06-02 01:18:20

Verifique as permissões antes (para android 6 e acima):

if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) ==
                            PackageManager.PERMISSION_GRANTED) 
   {

     context.startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:09130000000")));
   }
 5
Author: javad, 2018-02-27 17:15:59

Adicione "tel:" juntamente com o seu número para ser marcado na sua intenção e depois iniciar a sua actividade.

Intent myIntent = new Intent(Intent.ACTION_CALL);
 String phNum = "tel:" + "1234567890";
 myIntent.setData(Uri.parse(phNum));
  startActivity( myIntent ) ;
 4
Author: Ashu Singh, 2013-10-09 06:09:58

Para ter o código dentro de uma linha, tente isto:

startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:123456789")));
Juntamente com a devida permissão:
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
Espero que isto ajude!
 4
Author: Brian, 2014-02-08 00:17:12

Para os que utilizam o AppCompact...Tenta isto.

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.net.Uri;

public class MainActivity extends AppCompatActivity {



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button startBtn = (Button) findViewById(R.id.db);
        startBtn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                makeCall();
            }
        });

    }

    protected void makeCall() {
        EditText num = (EditText)findViewById(R.id.Dail);
        String phone = num.getText().toString();
        String d = "tel:" + phone ;
        Log.i("Make call", "");
        Intent phoneIntent = new Intent(Intent.ACTION_CALL);
        phoneIntent.setData(Uri.parse(d));
        try {
            startActivity(phoneIntent);
            finish();
            Log.i("Finished making a call", "");
        } catch (android.content.ActivityNotFoundException ex) {
            Toast.makeText(this, "Call faild, please try again later.", Toast.LENGTH_SHORT).show();
        }
    }

}

Então adicione isto ao seu manifesto,,,

 <uses-permission android:name="android.permission.CALL_PHONE" />
 2
Author: X-Black..., 2017-09-11 14:08:21

Também é bom verificar se a telefonia é suportada no dispositivo

private boolean isTelephonyEnabled(){
TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
return tm != null && tm.getSimState()==TelephonyManager.SIM_STATE_READY
}
 1
Author: Aristo Michael, 2013-12-19 07:16:06
I hope, this short code is useful for You,
   ## Java Code ##
 startActivity(new Intent(Intent.ACTION_DIAL,Uri.parse("tel:"+txtPhn.getText().toString())));



----------------------------------------------------------------------


Please check Manifest File,(for Uses permission)
## Manifest.xml ##
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.dbm.pkg"
    android:versionCode="1"
    android:versionName="1.0">

    <!-- NOTE! Your uses-permission must be outside the "application" tag
               but within the "manifest" tag. -->
## uses-permission for Making Call ##
    <uses-permission android:name="android.permission.CALL_PHONE" />

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name">

        <!-- Insert your other stuff here -->

    </application>

    <uses-sdk android:minSdkVersion="9" />
</manifest> 
 1
Author: RajeshkumarG, 2016-10-28 06:34:28

Acabei de resolver o problema num dispositivo Android 4.0.2 (GN) e a única versão que funciona para este dispositivo / versão foi semelhante à primeira 5-star com permissão para o telefone e a resposta:

Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:123456789"));
startActivity(callIntent);

Com qualquer outra solução eu tenho o ActivityNotFoundException neste dispositivo / versão. E as versões mais antigas? Alguém pode dar feedback?

 0
Author: BossOss, 2012-03-29 11:39:10

Com permissão:

Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:9875432100"));
if (ActivityCompat.checkSelfPermission(yourActivity.this,android.Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(yourActivity.this,
                        android.Manifest.permission.CALL_PHONE)) {
                } else {
                    ActivityCompat.requestPermissions(yourActivity.this,
                            new String[]{android.Manifest.permission.CALL_PHONE},
                            MY_PERMISSIONS_REQUEST_CALL_PHONE);
                }
            }
startActivity(callIntent);
 -1
Author: Santhosh, 2016-10-23 07:06:45