android - studio - programar mensajes de texto iphone
¿Puedo enviar automáticamente SMS(sin que el usuario deba aprobarlo)? (4)
Soy bastante nuevo en Android. Estoy tratando de enviar SMS desde la aplicación de Android. Cuando se usa la intención de SMS, se abre la ventana de SMS y el usuario debe aprobar el SMS y enviarlo.
¿Hay alguna manera de enviar automáticamente el SMS sin que el usuario lo confirme?
Gracias, Lior
Puede usar este método para enviar un sms. Si el sms tiene más de 160 caracteres, se utiliza sendMultipartTextMessage.
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);
}
}
}
Actualizar
piSend y piDelivered son intención pendiente Pueden activar una transmisión cuando el método termine de enviar un SMS
Aquí hay un código de muestra para el receptor de difusión
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();
}
};
y puedes registrarlo usando la línea debajo de tu Actividad
registerReceiver(receiver, new IntentFilter(SMS_SENT)); // SMS_SENT is a constant
Además, no te olvides de cancelar la transmisión en onDestroy
@Override
protected void onDestroy() {
unregisterReceiver(receiver);
super.onDestroy();
}
Sí, puede enviar sms sin hacer interacción con el usuario ... Pero funciona, cuando el usuario solo desea enviar sms a un solo número.
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();
}
Además, agregue el permiso de manifiesto ...
<uses-permission android:name="android.permission.SEND_SMS"/>
Sí, puedes enviar SMS usando SmsManager
. Tenga en cuenta que su aplicación necesitará el permiso SEND_SMS
para que esto funcione.
Si su aplicación tiene en AndroidManifest.xml el siguiente permiso
<uses-permission android:name="android.permission.SEND_SMS"/>
puedes enviar tantos SMS como quieras con
SmsManager manager = SmsManager.getDefault();
manager.sendTextMessage(...);
y eso es todo.