Comment faire un appel téléphonique en utilisant intent dans Android?

j'utilise le code suivant pour passer un appel sur Android mais il me donne une exception de sécurité s'il vous plaît aidez-moi.

 posted_by = "111-333-222-4";

 String uri = "tel:" + posted_by.trim() ;
 Intent intent = new Intent(Intent.ACTION_CALL);
 intent.setData(Uri.parse(uri));
 startActivity(intent);

autorisations

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

Exception

11-25 14:47:01.661: ERROR/AndroidRuntime(302): Uncaught handler: thread main exiting due to uncaught exception
11-25 14:47:01.681: ERROR/AndroidRuntime(302): java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:111-333-222-4 cmp=com.android.phone/.OutgoingCallBroadcaster } from ProcessRecord{43d32508 302:com.Finditnear/10026} (pid=302, uid=10026) requires android.permission.CALL_PHONE
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.os.Parcel.readException(Parcel.java:1218)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.os.Parcel.readException(Parcel.java:1206)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1214)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1373)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.app.Activity.startActivityForResult(Activity.java:2749)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.app.Activity.startActivity(Activity.java:2855)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at com.Finditnear.PostDetail.onClick(PostDetail.java:604)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at com.android.internal.app.AlertController$AlertParams.onItemClick(AlertController.java:884)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.widget.AdapterView.performItemClick(AdapterView.java:284)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.widget.ListView.performItemClick(ListView.java:3285)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640)
254
demandé sur Jonik 2010-11-25 12:49:31

19 réponses

vous pouvez utiliser Intent.ACTION_DIAL au lieu de Intent.ACTION_CALL . Cette option affiche le numéro déjà entré, mais permet à l'utilisateur de décider s'il doit faire l'appel ou non. ACTION_DIAL ne nécessite pas la permission CALL_PHONE .

323
répondu Ridcully 2017-08-17 13:08:56

cette démo vous sera utile...

cliquez sur le bouton d'appel:

Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "Your Phone_number"));
startActivity(intent);

Autorisation dans le Manifeste:

 <uses-permission android:name="android.permission.CALL_PHONE" />
194
répondu Denny Sharma 2014-03-21 22:21:59

option plus élégante:

String phone = "+34666777888";
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", phone, null));
startActivity(intent);
116
répondu cprcrack 2015-01-24 19:42:11

tout va bien.

je viens de placer l'étiquette d'autorisation d'appel avant l'étiquette d'application dans le fichier manifeste

et maintenant tout fonctionne bien.

67
répondu UMAR 2010-11-25 10:20:09

utilisez L'action ACTION_DIAL dans votre intention, de cette façon vous n'aurez pas besoin de permission. La raison pour laquelle vous avez besoin de la permission avec ACTION_CALL est de passer un appel téléphonique sans aucune action de la part de l'utilisateur.

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:0987654321"))
startActivity(intent);
33
répondu wheeliez 2018-08-13 15:37:37

juste le simple oneliner sans aucune permissions supplémentaires nécessaires:

private void dialContactPhone(final String phoneNumber) {
    startActivity(new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", phoneNumber, null)));
}
20
répondu Artemiy 2016-07-04 09:34:29

utilisez ce code complet

          Intent callIntent = new Intent(Intent.ACTION_DIAL);
          callIntent.setData(Uri.parse("tel:"+Uri.encode(PhoneNum.trim())));
          callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          startActivity(callIntent);     
13
répondu Osama Ibrahim 2014-01-27 09:22:24

demande de Permission dans le manifeste

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

pour les appels utilisez ce code

Intent in = new Intent(Intent.ACTION_CALL, Uri.parse("tel:99xxxxxxxx"));
try {
    startActivity(in);
} catch (android.content.ActivityNotFoundException ex) {
    Toast.makeText(mcontext, "Could not find an activity to place the call.", Toast.LENGTH_SHORT).show();
}
11
répondu Abhay Anand 2016-12-12 18:44:36

NOTE IMPORTANTE:

Si vous utilisez Intent.ACTION_CALL , vous devez ajouter CALL_PHONE autorisation.

C'est d'accord seulement si vous ne voulez pas que votre application se présente pour les comprimés qui ne prennent pas la carte SIM ou n'ont pas de GSM.

DANS VOTRE ACTIVITÉ:

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

manifeste:

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

donc si ce n'est pas une caractéristique critique de votre application, essayez de rester à l'écart de l'ajout de CALL_PHONE autorisation.

AUTRE SOLUTION:

Est de montrer l'application Téléphone avec le numéro écrit sur l'écran, de sorte que l'utilisateur aura seulement besoin de cliquer sur le bouton d'appel:

            Intent dialIntent = new Intent(Intent.ACTION_DIAL);
            dialIntent.setData(Uri.parse("tel:" + Constants.CALL_CENTER_NUMBER));
            startActivity(dialIntent);

pas besoin de permission pour cela.

11
répondu MBH 2017-08-21 06:30:06

Autorisations:

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

intention:

Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:0377778888"));
startActivity(callIntent);
7
répondu 2015-05-26 13:02:39

vous pouvez utiliser cela aussi bien:

String uri = "tel:" + posted_by.replaceAll("[^0-9|\+]", "");
5
répondu Áron Pável 2013-07-04 11:24:02

Permission dans AndroidManifest.xml

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

code complet:

private void onCallBtnClick(){
    if (Build.VERSION.SDK_INT < 23) {
        phoneCall();
    }else {

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

            phoneCall();
        }else {
            final String[] PERMISSIONS_STORAGE = {Manifest.permission.CALL_PHONE};
            //Asking request Permissions
            ActivityCompat.requestPermissions(mActivity, PERMISSIONS_STORAGE, 9);
        }
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    boolean permissionGranted = false;
    switch(requestCode){
        case 9:
            permissionGranted = grantResults[0]== PackageManager.PERMISSION_GRANTED;
            break;
    }
    if(permissionGranted){
        phoneCall();
    }else {
        Toast.makeText(mActivity, "You don't assign permission.", Toast.LENGTH_SHORT).show();
    }
}

private void phoneCall(){
    if (ActivityCompat.checkSelfPermission(mActivity,
            Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
        Intent callIntent = new Intent(Intent.ACTION_CALL);
        callIntent.setData(Uri.parse("tel:12345678900"));
        mActivity.startActivity(callIntent);
    }else{
        Toast.makeText(mActivity, "You don't assign permission.", Toast.LENGTH_SHORT).show();
    }
}
5
répondu Atif Mahmood 2017-10-26 02:56:09

pour éviter cela - on peut utiliser L'interface graphique pour entrer les permissions. Eclipse prendre soin de l'endroit où insérer l'étiquette de permission et le plus souvent n'est pas correcte

3
répondu SaKet 2011-02-26 21:52:31

dans Android pour certaines fonctionnalités, vous devez ajouter la permission au fichier Manifest.

  1. Aller à la Projets de AndroidManifest.xml
  2. cliquez sur L'onglet Autorisations
  3. cliquez sur Ajouter
  4. Select Utilise La Permission
  5. voir l'instantané ci-dessous enter image description here

6.Enregistrez le fichier de manifeste et lancez votre projet. Votre projet devrait maintenant fonctionner comme prévu.

1
répondu MindBrain 2014-06-03 15:00:26
11-25 14:47:01.681: ERROR/AndroidRuntime(302): blah blah...requires android.permission.CALL_PHONE

^ la réponse se trouve dans la sortie d'exception" requires android.permission.CALL_PHONE " :)

1
répondu Charlie Scott-Skinner 2014-10-14 08:37:22
 if(ContextCompat.checkSelfPermission(
        mContext,android.Manifest.permission.CALL_PHONE) != 
              PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions((Activity) mContext, new 
                  String[]{android.Manifest.permission.CALL_PHONE}, 0);
                } else {
                    startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "Your Number")));
                }
1
répondu Mohsinali 2018-04-03 05:42:09

pour effectuer une activité d'appel en utilisant intents, vous devez demander les permissions appropriées.

pour que vous incluez les autorisations d'utilisation dans AndroidManifest.fichier xml.

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

puis inclure le code suivant dans votre activité

if (ActivityCompat.checkSelfPermission(mActivity,
        Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
    //Creating intents for making a call
    Intent callIntent = new Intent(Intent.ACTION_CALL);
    callIntent.setData(Uri.parse("tel:123456789"));
    mActivity.startActivity(callIntent);

}else{
    Toast.makeText(mActivity, "You don't assign permission.", Toast.LENGTH_SHORT).show();
}
1
répondu Codemaker 2018-06-30 09:04:54
    final public void Call(View view){

    try {

        EditText editt=(EditText)findViewById(R.id.ed1);
        String str=editt.getText().toString();
        Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:"+str));
        startActivity(intent);
    }
    catch (android.content.ActivityNotFoundException e){

        Toast.makeText(getApplicationContext(),"App failed",Toast.LENGTH_LONG).show();
    }
0
répondu Deepak Singh 2016-12-05 14:38:14

je pense que vous avez juste besoin d'ajouter une permission dans votre manifeste:

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

cela vous débarrassera de votre exception de sécurité.

-35
répondu raghav chopra 2012-08-10 12:59:09