web-dev-qa-db-fra.com

Envoi SMS par programme sans ouvrir l'application de messagerie

Jusqu'à présent, j'utilise le code suivant pour envoyer SMS) vers un autre téléphone via mon application.

Intent intent = new Intent( Intent.ACTION_VIEW, Uri.parse( "sms:" + srcNumber)); 
                    intent.putExtra( "sms_body", message ); 
                    startActivity(intent);

Cependant, cela ouvre l'application de messagerie native, plaçant ainsi l'activité de mon application en arrière-plan. Est-il possible d'envoyer le SMS directement sans que l'application de messagerie native s'ouvre? Si oui, comment?

54
SoulRayder

Vous pouvez envoyer un message à partir de votre application via:

public void sendSMS(String phoneNo, String msg) {
    try {      
        SmsManager smsManager = SmsManager.getDefault();
        smsManager.sendTextMessage(phoneNo, null, msg, null, null);    
        Toast.makeText(getApplicationContext(), "Message Sent",
              Toast.LENGTH_LONG).show();
    } catch (Exception ex) {
        Toast.makeText(getApplicationContext(),ex.getMessage().toString(),
              Toast.LENGTH_LONG).show();
        ex.printStackTrace();
    } 
}

De plus, vous devez donner la permission SEND_SMS Dans AndroidManifest.xml Pour envoyer un message.

<uses-permission Android:name="Android.permission.SEND_SMS" />

102
Himanshu Agarwal
public void sendLongSMS() {
    String phoneNumber = "0123456789";
    String message = "Hello World! Now we are going to demonstrate " + 
        "how to send a message with more than 160 characters from your Android application.";
    SmsManager smsManager = SmsManager.getDefault();
    ArrayList<String> parts = smsManager.divideMessage(message); 
    smsManager.sendMultipartTextMessage(phoneNumber, null, parts, null, null);
}

et n'oubliez pas d'ajouter

<uses-permission Android:name="Android.permission.SEND_SMS"/>
14
Abhishek Chaubey

Envoi de sms avec demande d'autorisation:

Ajouter dans le manifeste:

<uses-permission Android:name="Android.permission.SEND_SMS" />

Ajouter Java Fonction:

void sendSmsMsgFnc(String mblNumVar, String smsMsgVar)
{
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) == PackageManager.PERMISSION_GRANTED)
    {
        try
        {
            SmsManager smsMgrVar = SmsManager.getDefault();
            smsMgrVar.sendTextMessage(mblNumVar, null, smsMsgVar, null, null);
            Toast.makeText(getApplicationContext(), "Message Sent",
                    Toast.LENGTH_LONG).show();
        }
        catch (Exception ErrVar)
        {
            Toast.makeText(getApplicationContext(),ErrVar.getMessage().toString(),
                    Toast.LENGTH_LONG).show();
            ErrVar.printStackTrace();
        }
    }
    else
    {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
        {
            requestPermissions(new String[]{Manifest.permission.SEND_SMS}, 10);
        }
    }

}
7
Sujay U N

Oui, j'ai trouvé la réponse à ma propre question :)

Utilisez le code suivant pour le même:

 SmsManager sms = SmsManager.getDefault();
                     sms.sendTextMessage(srcNumber, null, message, null, null);

Cela nécessite que l’autorisation suivante soit déclarée sur le xml manifeste de Android.

  <uses-permission Android:name="Android.permission.SEND_SMS"/>
5
SoulRayder
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNo, null, sms, null, null);
2
Dilavar M