Android - отправка сообщения одной кнопкой - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь одним нажатием кнопки моего приложения отправить предварительно определенное сообщение на заранее определенный номер.

  import android.app.Activity;
  import android.view.View.OnClickListener;
  import android.os.Bundle;
  import android.telephony.SmsManager;
  import android.view.View;
  import android.widget.Button;
  import android.widget.Toast;

  public class SendSMSActivity extends Activity {


 Button Send;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_send_sms);

    Send = (Button) findViewById(R.id.Send);

    buttonSend.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            String phoneNo = "+0101795123456";
            String mssg = "It is working!";

            try {
                SmsManager smsManager = SmsManager.getDefault();
                smsManager.sendTextMessage(phoneNo, null, mssg, null,      null);
                Toast.makeText(getApplicationContext(), "SMS    Sent!"+phoneNo,
                        Toast.LENGTH_LONG).show();
            } catch (Exception e) {
                Toast.makeText(getApplicationContext(),
                        "SMS failed!"+phoneNo,
                        Toast.LENGTH_LONG).show();
                e.printStackTrace();
            }

        }
    });

  }
}

Просто получить сообщение о том, что оно не отправлено, этопробуя это на реальном телефоне, а не на эмуляторе, может кто-нибудь помочь направить меня в правильном направлении.

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Я предлагаю использовать библиотеку: https://github.com/klinker41/android-smsmms

внедрить в Gradle

compile 'com.klinkerapps:android-smsmms:5.1.0'

Сначала создайте объект настроек со всей необходимой информацией для того, что выхотеть сделать.Если вы что-то не установили, то это просто будет установлено по умолчанию, и эта функция может не работать.Например, если вам нужно MMS, установите MMSC, прокси-сервер и порт, иначе вы будете каждый раз получать сообщение об ошибке.

Settings sendSettings = new Settings();

Далее присоедините этот объект настроек к отправителю

Transaction sendTransaction = new Transaction(mContext, sendSettings);
Now, create the Message you want to send

Message mMessage = new Message(textToSend, addressToSendTo);
mMessage.setImage(mBitmap);   // not necessary for voice or sms messages

И тогда все, что вам нужно сделать, это отправить сообщение

sendTransaction.sendNewMessage(message, threadId)

Примечание: threadId может быть аннулирован (используя Transaction.NO_THREAD_ID), но это иногда приводит к созданию нового потока вместодобавляемое сообщение в существующую ветку

Если вы хотите отправлять MMS-сообщения, обязательно добавьте это в свой манифест:

<service android:name="com.android.mms.transaction.TransactionService"/>

Пример функции:

 public void sendMessage() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                com.klinker.android.send_message.Settings sendSettings = new com.klinker.android.send_message.Settings();
                sendSettings.setMmsc(settings.getMmsc());
                sendSettings.setProxy(settings.getMmsProxy());
                sendSettings.setPort(settings.getMmsPort());
                sendSettings.setUseSystemSending(true);

                Transaction transaction = new Transaction(MainActivity.this, sendSettings);

                Message message = new Message(messageField.getText().toString(), toField.getText().toString());

                if (imageToSend.isEnabled()) {
                    message.setImage(BitmapFactory.decodeResource(getResources(), R.drawable.android));
                }

                transaction.sendNewMessage(message, Transaction.NO_THREAD_ID);
            }
        }).start();
    }
0 голосов
/ 26 сентября 2018

Привет! Я создал приложение такого типа, пожалуйста, пройдите по нижеуказанным кодам и соответственно обновите свой.

Мой класс MainActivity

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    // Constants
    private static final String TAG = MainActivity.class.getSimpleName();
    private static final int REQUEST_PERMISSION_SEND_SMS = 400;

    // UI  Components
    private EditText mEtMobileNumber, mEtMessage;
    private Button mBtnSendMessage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }

    private void initView() {
        mEtMobileNumber = findViewById(R.id.activity_main_et_mobile_number);
        mEtMessage = findViewById(R.id.activity_main_et_message);

        mBtnSendMessage = findViewById(R.id.activity_main_btn_send_message);
        mBtnSendMessage.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.activity_main_btn_send_message:
                checkRuntimePermissionForSMS();
                break;
            default:
                break;
        }
    }


    private void checkRuntimePermissionForSMS(){
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS}, REQUEST_PERMISSION_SEND_SMS);
        }else{
            sendMessageFunction(mEtMobileNumber.getText().toString(), mEtMessage.getText().toString());
        }
    }

    private void sendMessageFunction(String phoneNo, String message) {
        SmsManager smsManager = SmsManager.getDefault();
        smsManager.sendTextMessage(phoneNo, null, message, null, null);
        Toast.makeText(getApplicationContext(), "SMS sent.",
                Toast.LENGTH_LONG).show();
    }


    @Override
    public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {
        switch (requestCode) {
            case REQUEST_PERMISSION_SEND_SMS: {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    sendMessageFunction(mEtMobileNumber.getText().toString(), mEtMessage.getText().toString());
                } else {
                    Toast.makeText(getApplicationContext(), "SMS faild, please try again.", Toast.LENGTH_LONG).show();
                    return;
                }
            }
        }

    }
}

Мой файл манифеста, который я добавил после разрешения

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

Вот и все, это будет работать для меня,

Если вам нужна дополнительная помощь, пожалуйста, добавьте комментарий к этому ответу, я загружу пример проекта в GitHub и поделюсь им с вами.

Спасибо!

0 голосов
/ 26 сентября 2018

Укажите это в своем манифесте:

<uses-permission android:name="android.permission.SEND_SMS"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...