Search code examples
androidsmssmsmanager

Sms manager is not working


I am using SMS manager to send SMS with sent Pending Intent and Delivered Pending Intent. My app only uses the SMS sending feature and I have also placed this permission

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

Here is my code in a Fragment's OnAcitivityCreated method:

try {
    String SENT = "SMS_SENT";
    String DELIVERED = "SMS_DELIVERED";

    PendingIntent sentPI = PendingIntent.getBroadcast(getActivity().getApplicationContext(), 0,
            new Intent(SENT), 0);

    PendingIntent deliveredPI = PendingIntent.getBroadcast(getActivity().getApplicationContext(), 0,
            new Intent(DELIVERED), 0);
    //PendingIntent sentPI;
    //String SENT = "SMS_SENT";
   // sentPI = PendingIntent.getBroadcast(getActivity().getApplicationContext(), 0,new Intent(getActivity().getApplicationContext(),MainActivity.class), 0);

    getActivity().registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            switch (getResultCode()) {
                case Activity.RESULT_OK:
                    Toast.makeText(getActivity().getApplicationContext(), "SMS sent",
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    Toast.makeText(getActivity().getApplicationContext(), "Generic failure",
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NO_SERVICE:
                    Toast.makeText(getActivity().getApplicationContext(), "No service",
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NULL_PDU:
                    Toast.makeText(getActivity().getApplicationContext(), "Null PDU",
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_RADIO_OFF:
                    Toast.makeText(getActivity().getApplicationContext(), "Radio off",
                            Toast.LENGTH_SHORT).show();
                    break;
            }

        }
    },new IntentFilter(SENT));

    SmsManager smsmanager = SmsManager.getDefault();
    smsmanager.sendTextMessage("+923349521400", null, message, sentPI, deliveredPI);
    Toast.makeText(getActivity(), "Sms sent!", Toast.LENGTH_LONG).show();
}
catch (Exception e)
{
    Toast.makeText(getActivity(), "failure", Toast.LENGTH_LONG).show();

}

Solution

  • Hope this code helps you out :)

    public class MainActivity extends Activity {
        private int mMessageSentParts;
        private int mMessageSentTotalParts;
        private int mMessageSentCount;
         String SENT = "SMS_SENT";
         String DELIVERED = "SMS_DELIVERED";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button button=(Button)findViewById(R.id.button1);
            button.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    String phoneNumber = "0000000000";
                    String message = "Hello World!";
                    sendSMS(phoneNumber,message);
    
    
                }
            });
    
    
    
        }
    
    
        public void sendSMS(String phoneNumber,String message) {
            SmsManager smsManager = SmsManager.getDefault();
    
    
             String SENT = "SMS_SENT";
                String DELIVERED = "SMS_DELIVERED";
    
                SmsManager sms = SmsManager.getDefault();
                ArrayList<String> parts = sms.divideMessage(message);
                int messageCount = parts.size();
    
                Log.i("Message Count", "Message Count: " + messageCount);
    
                ArrayList<PendingIntent> deliveryIntents = new ArrayList<PendingIntent>();
                ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>();
    
                PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0);
                PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0);
    
                for (int j = 0; j < messageCount; j++) {
                    sentIntents.add(sentPI);
                    deliveryIntents.add(deliveredPI);
                }
    
                // ---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.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
               /* sms.sendMultipartTextMessage(phoneNumber, null, parts, sentIntents, deliveryIntents); */
        }
    }