Search code examples
javaandroidandroid-permissionssmsmanagerandroid-sms

Sending text message using android application


I am trying to build an SMS application by following this tutorial and everything seems to be fine except when I hit the send button,the message is not received by the other user whose number I have entered in the EditText. In the application I have two EditText and one button.One EditText is for the message and the other for specifying the phone number of the receiver. The code is given below :

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private static final int MY_PERMISSIONS_REQUEST_SEND_SMS =0 ;
    Button send;
    EditText message;
    EditText phoneno;
    String number;
    String txt;

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

        send=(Button)findViewById(R.id.sendButton);
        message=(EditText)findViewById(R.id.textMessage);
        phoneno=(EditText)findViewById(R.id.phone);

        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                sendSMSMessage();
            }
        });
    }

    public void sendSMSMessage(){
        number=phoneno.getText().toString();
        txt=message.getText().toString();

        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.SEND_SMS)
                != PackageManager.PERMISSION_GRANTED) {
            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.SEND_SMS)) {
            } else {
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.SEND_SMS},
                        MY_PERMISSIONS_REQUEST_SEND_SMS);
            }
        }

    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        //super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_SEND_SMS: {
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    SmsManager smsManager = SmsManager.getDefault();
                    smsManager.sendTextMessage(number, null, txt, null, null);
                    Toast.makeText(getApplicationContext(), "SMS sent.",
                            Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(getApplicationContext(),
                            "SMS faild, please try again.", Toast.LENGTH_LONG).show();
                    return;
                }
            }
        }

    }
}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.shaloin.sample852.MainActivity">

<EditText
    android:id="@+id/textMessage"
    android:textSize="20sp"
    android:layout_marginTop="20dp"
    android:hint="Text Message"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
<EditText
    android:id="@+id/phone"
    android:layout_below="@+id/textMessage"
    android:textSize="20sp"

    android:layout_marginTop="20dp"
    android:hint="Phone Number"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
<Button
    android:id="@+id/sendButton"
    android:layout_below="@+id/phone"
    android:layout_centerHorizontal="true"
    android:text="Send"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.shaloin.sample852">

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

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

I have tried sending message using the in-built SMS application and it works but the application which I just made doesn't.Can anyone help ? Thank you :)


Solution

  • Actually, you didn't write the code to send the message in sendSMSMessage function, may be first time message might send the message.

    public void sendSMSMessage() {
        number = phoneno.getText().toString();
        txt = message.getText().toString();
    
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.SEND_SMS)
                != PackageManager.PERMISSION_GRANTED) {
            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.SEND_SMS)) {
            } else {
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.SEND_SMS},
                        MY_PERMISSIONS_REQUEST_SEND_SMS);
            }
            return;
        }
    
        sendMessage();
    
    }
    
    public void sendMessage() {
       SmsManager smsManager = SmsManager.getDefault();
        smsManager.sendTextMessage(number, null, txt, null, null);
        Toast.makeText(getApplicationContext(), "SMS sent.",
                Toast.LENGTH_LONG).show();
    }