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
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);
}
}
}
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();
}
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.
Oui, vous pouvez envoyer SMS en utilisant SmsManager
. N'oubliez pas que votre application aura besoin de SEND_SMS
autorisation pour que cela fonctionne.
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"/>