Can i automatically send SMS (Without the user need to approve)

前端 未结 5 616
迷失自我
迷失自我 2020-12-02 08:36

I\'m rather new to Android. Im trying to send SMS from Android application. When using the SMS Intent the SMS window opens and the user needs to approve the SMS and send i

相关标签:
5条回答
  • 2020-12-02 08:54

    You can use this method to send an sms. If the sms is greater than 160 character then sendMultipartTextMessage is used.

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

    Update

    piSend and piDelivered are Pending Intent They can trigger a broadcast when the method finish sending an SMS

    Here is sample code for broadcast receiver

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

    and you can register it using below line in your Activity

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

    Also don't forget to unregister broadcast in onDestroy

    @Override
    protected void onDestroy() {
        unregisterReceiver(receiver);
        super.onDestroy();
    }
    
    0 讨论(0)
  • 2020-12-02 08:56
    //sent sms
    private void sendSMS(String phoneNumber, String message) {
        String SENT = "SMS_SENT";
        String DELIVERED = "SMS_DELIVERED";
    
        PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0);
        PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0);
    
        // ---when the SMS has been sent---
        registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context arg0, Intent arg1) {
    
                switch (getResultCode()) {
    
                    case Activity.RESULT_OK:
    
                        Toast.makeText(getBaseContext(), "SMS sent",
                                Toast.LENGTH_SHORT).show();
                        break;
    
                    case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
    
                        Toast.makeText(getBaseContext(), "Generic failure",
                                Toast.LENGTH_SHORT).show();
                        break;
    
                    case SmsManager.RESULT_ERROR_NO_SERVICE:
    
                        Toast.makeText(getBaseContext(), "No service",
                                Toast.LENGTH_SHORT).show();
                        break;
    
                    case SmsManager.RESULT_ERROR_NULL_PDU:
    
                        Toast.makeText(getBaseContext(), "Null PDU",
                                Toast.LENGTH_SHORT).show();
                        break;
    
                    case SmsManager.RESULT_ERROR_RADIO_OFF:
    
                        Toast.makeText(getBaseContext(), "Radio off",
                                Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        }, new IntentFilter(SENT));
    
        // ---when the SMS has been delivered---
        registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context arg0, Intent arg1) {
    
                switch (getResultCode()) {
    
                    case Activity.RESULT_OK:
    
                        Toast.makeText(getBaseContext(), "SMS delivered",
                                Toast.LENGTH_SHORT).show();
                        break;
    
                    case Activity.RESULT_CANCELED:
    
                        Toast.makeText(getBaseContext(), "SMS not delivered",
                                Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        }, new IntentFilter(DELIVERED));
    
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
    }
    

    you can use this complete function

    0 讨论(0)
  • 2020-12-02 09:03

    If your application has in the AndroidManifest.xml the following permission

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

    you can send as many SMS as you want with

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

    and that is all.

    0 讨论(0)
  • 2020-12-02 09:18

    Yes, you can send SMS using the SmsManager. Please keep in mind that your application will need the SEND_SMS permission for this to work.

    0 讨论(0)
  • 2020-12-02 09:19

    Yes, you can send sms without making user interaction...But it works, when user wants to send sms only to a single number.

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

    Also, add manifest permission....

    <uses-permission android:name="android.permission.SEND_SMS"/>
    
    0 讨论(0)
提交回复
热议问题