Search code examples
javaandroidbroadcastreceiversms

How can i receive SMS in my app in Runtime?


I want to receive SMS in my app when SMS received by default SMS app. I want to print that SMS when received my default SMS app. I have printed last received SMS by using this method.

void print_message() throws IOException {
        ActivityCompat.requestPermissions(Objects.requireNonNull(getActivity()), new String[]{Manifest.permission.READ_SMS, Manifest.permission.SEND_SMS}, PackageManager.PERMISSION_GRANTED);

        Cursor cursor = getActivity().getContentResolver().query(Uri.parse("content://sms/inbox"), null, null, null, null);

        if (cursor.moveToFirst()) { // must check the result to prevent exception

                String msgData = "";

                    msgData += " " + cursor.getColumnName(2) + ":" + cursor.getString(2) + "\n " + cursor.getColumnName(12) + ":" + cursor.getString(12);
               
                printData(msgData);
        }

        cursor.close();
    }

how can I print this message when app is running.


Solution

  • Try This

    public class SmsListener extends BroadcastReceiver{
    
        private SharedPreferences preferences;
    
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
    
            if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
                Bundle bundle = intent.getExtras();           //---get the SMS message passed in---
                SmsMessage[] msgs = null;
                String msg_from;
                if (bundle != null){
                    //---retrieve the SMS message received---
                    try{
                        Object[] pdus = (Object[]) bundle.get("pdus");
                        msgs = new SmsMessage[pdus.length];
                        for(int i=0; i<msgs.length; i++){
                            msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                            msg_from = msgs[i].getOriginatingAddress();
                            String msgBody = msgs[i].getMessageBody();
                        }
                    }catch(Exception e){
    //                            Log.d("Exception caught",e.getMessage());
                    }
                }
            }
        }
    }
    

    Note: In your manifest file add the BroadcastReceiver

    <receiver android:name=".listener.SmsListener">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>
    

    Add this permission:

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