Могу ли я автоматически отправлять SMS (без подтверждения пользователя) - PullRequest
33 голосов
/ 01 октября 2011

Я довольно новичок в Android. Я пытаюсь отправить SMS из приложения Android. При использовании SMS Intent открывается окно SMS, и пользователю необходимо подтвердить SMS и отправить его.

Есть ли способ автоматической отправки SMS без подтверждения пользователем?

Спасибо, Лиор

Ответы [ 4 ]

39 голосов
/ 01 октября 2011

Вы можете использовать этот метод для отправки смс. Если значение SMS превышает 160 символов, используется 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);
            }
    }
}

Обновление

piSend и piDelivered находятся в состоянии ожидания

Вот пример кода для приемника вещания

    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();
      }
  };

, и вы можете зарегистрировать его, используя строку ниже в вашей Активности

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

Также не забудьте отменить трансляцию в onDestroy

@Override
protected void onDestroy() {
    unregisterReceiver(receiver);
    super.onDestroy();
}
18 голосов
/ 01 октября 2011

Если ваше приложение имеет в AndroidManifest.xml следующее разрешение

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

Вы можете отправить столько SMS, сколько хотите, с помощью

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

и это все.

7 голосов
/ 01 октября 2011

Да, вы можете отправлять SMS с помощью SmsManager. Помните, что вашему приложению потребуется разрешение SEND_SMS, чтобы это работало.

2 голосов
/ 01 марта 2017

Да, вы можете отправлять смс без взаимодействия с пользователем ... Но это работает, когда пользователь хочет отправлять смс только на один номер.

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();    
}    

Кроме того, добавьте разрешение для манифеста ....

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