web-dev-qa-db-fra.com

Puis-je envoyer automatiquement SMS (sans que l'utilisateur ait besoin d'approuver)

Je suis plutôt nouveau sur Android. Im essayant d'envoyer SMS depuis Android application. Lorsque vous utilisez SMS l'intention, la fenêtre SMS s'ouvre et l'utilisateur doit approuver le SMS et l'envoyer.

Existe-t-il un moyen d'envoyer automatiquement le SMS sans que l'utilisateur ne le confirme?

Merci, Lior

33
user733284

Vous pouvez utiliser cette méthode pour envoyer un SMS. Si le sms est supérieur à 160 caractères, sendMultipartTextMessage est utilisé.

private void sendSms(String phonenumber,String message, boolean isBinary)
{
    SmsManager manager = SmsManager.getDefault();

    PendingIntent piSend = PendingIntent.getBroadcast(this, 0, new Intent(SMS_SENT), 0);
    PendingIntent piDelivered = PendingIntent.getBroadcast(this, 0, new Intent(SMS_DELIVERED), 0);

    if(isBinary)
    {
            byte[] data = new byte[message.length()];

            for(int index=0; index<message.length() && index < MAX_SMS_MESSAGE_LENGTH; ++index)
            {
                    data[index] = (byte)message.charAt(index);
            }

            manager.sendDataMessage(phonenumber, null, (short) SMS_PORT, data,piSend, piDelivered);
    }
    else
    {
            int length = message.length();

            if(length > MAX_SMS_MESSAGE_LENGTH)
            {
                    ArrayList<String> messagelist = manager.divideMessage(message);

                    manager.sendMultipartTextMessage(phonenumber, null, messagelist, null, null);
            }
            else
            {
                    manager.sendTextMessage(phonenumber, null, message, piSend, piDelivered);
            }
    }
}

Mise à jour

piSend et piDelivered sont en attente d'intention Ils peuvent déclencher une diffusion lorsque la méthode a fini d'envoyer un SMS

Voici un exemple de code pour le récepteur de diffusion

    private BroadcastReceiver receiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            String message = null;

            switch (getResultCode()) {
            case Activity.RESULT_OK:
                message = "Message sent!";
                break;
            case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                message = "Error. Message not sent.";
                break;
            case SmsManager.RESULT_ERROR_NO_SERVICE:
                message = "Error: No service.";
                break;
            case SmsManager.RESULT_ERROR_NULL_PDU:
                message = "Error: Null PDU.";
                break;
            case SmsManager.RESULT_ERROR_RADIO_OFF:
                message = "Error: Radio off.";
                break;
            }

            AppMsg.makeText(SendMessagesWindow.this, message,
                    AppMsg.STYLE_CONFIRM).setLayoutGravity(Gravity.BOTTOM)
                    .show();
      }
  };

et vous pouvez l'enregistrer en utilisant la ligne ci-dessous dans votre activité

registerReceiver(receiver, new IntentFilter(SMS_SENT));  // SMS_SENT is a constant

N'oubliez pas non plus de désinscrire la diffusion dans onDestroy

@Override
protected void onDestroy() {
    unregisterReceiver(receiver);
    super.onDestroy();
}
39
Sunny

Si votre application possède dans AndroidManifest.xml l'autorisation suivante

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

vous pouvez envoyer autant de SMS que vous voulez avec

SmsManager manager = SmsManager.getDefault();
manager.sendTextMessage(...);

et c'est tout.

18
fampinheiro

Oui, vous pouvez envoyer SMS en utilisant SmsManager . N'oubliez pas que votre application aura besoin de SEND_SMS autorisation pour que cela fonctionne.

7
Josef Pfleger

Oui, vous pouvez envoyer des sms sans faire d'interaction avec l'utilisateur ... Mais cela fonctionne, lorsque l'utilisateur ne souhaite envoyer des sms qu'à un seul numéro.

try {    
    SmsManager.getDefault().sendTextMessage(RecipientNumber, null,    
    "Hello SMS!", null, null);    
} catch (Exception e) {    
    AlertDialog.Builder alertDialogBuilder = new    
    AlertDialog.Builder(this);    
    AlertDialog dialog = alertDialogBuilder.create();    
    dialog.setMessage(e.getMessage());    
    dialog.show();    
}    

Ajoutez également l'autorisation manifeste ...

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