Comment passer un appel téléphonique par programmation?

123

Je passe à une activité le numéro à appeler par un bundle

et puis, dans une telle activité, j'ai un bouton pour appeler ce numéro, c'est le code:

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

Quelque chose ne va pas, car lorsque j'appuie sur le bouton, rien ne se passe ...

Qu'est-ce que je fais mal?

PD: J'utilise un projet compatible Android 1.5 ... peut-être que l'appel téléphonique est incompatible avec 1.5?

NullPointerException
la source
pls coller logcat o / p ou élaborer les détails de l'erreur ur
chikka.anddev

Réponses:

259

Vous avez oublié d'appeler startActivity. Ça devrait ressembler à ça:

Intent intent = new Intent(Intent.ACTION_CALL);

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

Une intention en soi est simplement un objet qui décrit quelque chose. Ça ne fait rien.

N'oubliez pas d'ajouter l'autorisation appropriée à votre manifeste:

<uses-permission android:name="android.permission.CALL_PHONE" />
Lior
la source
Salut @Lior, comment pourrais-je faire si cet appareil a une double sim. Est-il possible de passer un appel via une carte SIM particulière?
Dinash
3
@Dinash: Jetez un œil à cette question déjà répondue: stackoverflow.com/questions/13231962/call-from-second-sim
Lior
J'ai utilisé le même code mais je ne travaille pas dans le bord du Galaxy S7. Ceci est mon code Intent intentCall = new Intent (Intent.ACTION_CALL); Chaîne uri = "tel:" + nombre.trim (); intentCall.setData (Uri.parse (uri)); if (ActivityCompat.checkSelfPermission (getApplicationContext (), Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {startActivity (intentCall); }
AngelJanniee
Ce simulateur peut-il être utilisé pour passer des appels sans appareil physique
user3754136
24

J'ai essayé cela sur mon téléphone et cela fonctionne parfaitement.

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

Ajoutez cette autorisation dans le fichier manifeste.

<uses-permission android:name="android.permission.CALL_PHONE" />
Anirudh
la source
1
le nombre est comme 1689, 3,2,1,1. Je reçois un problème, ce ne sera que 1689..S'il vous plaît, aidez-moi si vous avez une solution pour le même.
Teraiya Mayur
@TeraiyaMayur vous pouvez d'abord supprimer tous les caractères non numériques. Donc , si vous avez le numéro de téléphone que String number = "1689,,3,2,1,1fairenubmer = "tel:" + number.replaceAll("[^0-9]", "");
Marche
@Walk, un problème est que nous voulons appeler avec des symboles spéciaux comme ,*. Ils doivent être parmi les chiffres. Sur un émulateur, cela fonctionne correctement, mais sur un appareil, il supprime des symboles et des chiffres supplémentaires.
CoolMind
13
 Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+198+","+1+","+1)); 
             startActivity(callIntent);

pour plusieurs appels commandés

Ceci est utilisé pour les systèmes d'appel DTMF. Si l'appel est interrompu, vous devriez passer plus de "," entre les numéros.

Dwivedi Ji
la source
Dwivedi Ji: le nombre est comme 1689`` 3,2,1,1. Je reçois un problème, ce ne sera que 1689..S'il vous plaît, aidez-moi si vous avez une solution pour le même.
Teraiya Mayur
@TeraiyaMayur, cela dépend du système d'appel IVRS. Son travail pour moi en raison de mon appel de soutien à l'extinction prend une réponse rapide.
Dwivedi Ji
Oui, vous avez raison, j'obtiens également un numéro IVR valide et cela fonctionne très bien. merci
Teraiya Mayur
7

Dans la réponse sélectionnée, il n'y a pas de vérification de l'autorisation de guimauve. Cela ne fonctionnera pas directement dans l'appareil marshmallow 6.0 ou supérieur.

Je sais que je suis trop tard, mais cette question a beaucoup de voix, alors j'ai pensé que cela aiderait d'autres à l'avenir.

Dans les appareils guimauve, nous devons obtenir l'autorisation d'exécution pour l'appel ...

Voici un exemple pour faire un appel en guimauve ou au dessus.

Comment passer un appel dans Android Marshmallow 6.0 ou supérieur

Vishal Chhodwani
la source
2

Ici, je vais vous montrer comment vous pouvez passer un appel téléphonique à partir de votre activité. Pour passer un appel, vous devez mettre ce code dans votre application.

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();
}
Pir Fahim Shah
la source
1
@Astor je l'ai défini très clairement, et j'ai déjà obtenu des points à travers cela, ce qui signifie que ma réponse est quelque chose de mieux que l'autre pour certaines personnes.
Pir Fahim Shah
2

Cela ne nécessite pas d'autorisation.

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)

Mais il affiche une autre boîte de dialogue (vous demandant si vous voulez appeler le téléphone une seule fois ou toujours). Il serait donc préférable d'utiliser ACTION_CALLavec une permission (voir permission révoquée android.permission.CALL_PHONE ).

CoolMind
la source
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);
        }
    });*
 }
Muhammad Usman Ghani
la source
0

Si quelqu'un cherche à Kotlin

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

Comme certaines autres solutions, il nécessite une android.permission.CALL_PHONEautorisation.

mughil
la source