1

Here is my service MyServiceSMS.java Whenever I close my app I only receive a default toast of broadcastreceiver "Message Recieved By : xxxxxxx" Rest of the code is not executing below onReceiceve. I have some task inside onReceiceve method, I want them to be executed even if the user closes the app.

public class MyServiceSMS extends Service {

    private IntentFilter mIntentFilter;
    private SMSGetter smsGetter;

    @Override
    public void onCreate() {
        super.onCreate();




   }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        smsGetter = new SMSGetter();
        mIntentFilter = new IntentFilter();
        mIntentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
        registerReceiver(smsGetter, mIntentFilter);

        Toast.makeText(this, "Hello I'm a service", Toast.LENGTH_SHORT).show();


        return START_STICKY;
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }


    @Override
    public void onDestroy() {
        super.onDestroy();

        //unregisterReceiver(smsGetter);
    }

    public class SMSGetter extends BroadcastReceiver {


        @Override
        public void onReceive(Context context, Intent intent) {

            Bundle bundle = intent.getExtras();


            if (bundle != null) {

                Object[] pdus = (Object[]) bundle.get("pdus");
                SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[0]);

                JSONObject data = new JSONObject();
                try {
                    data.put("from", smsMessage.getDisplayOriginatingAddress());
                    data.put("message", smsMessage.getMessageBody());

                    SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
                    if (sharedPreferences.contains(IP) && sharedPreferences.contains(IP)) {

                        sendSMsToServer sendTextToServer = new sendSMsToServer();
                        sendTextToServer.execute(data.toString(), sharedPreferences.getString(IP, ""), sharedPreferences.getString(PORT, ""));
                        Toast.makeText(context, "Your Ip :" + data.toString(), Toast.LENGTH_LONG).show();

                    } else {

                        Toast.makeText(context, "Your IP is empty .. Scan to get IP Again ..", Toast.LENGTH_LONG).show();
                    }


                } catch (JSONException e) {
                    e.printStackTrace();
                }


                // Toast.makeText(context, smsMessage.getDisplayMessageBody(), Toast.LENGTH_SHORT).show();

            }


        }


    }
}

My Manifest

<service
            android:name=".viewmodel.MyServiceSMS"
            android:enabled="true"
            android:exported="true"></service>
  • You may want to keep your service running constantly by making it a [foreground service](https://developer.android.com/guide/components/services), or you could [install the SMS BroadcastReceiver via the manifest](https://stackoverflow.com/a/13894027/6759241), so that your app regains execution when a message comes in. – greeble31 Oct 30 '18 at 22:54
  • @greeble31 I want to receive sms when my app is closed. And I want my onReceive method do some task when my app is closed and in the background. – Md. Rafsan Biswas Oct 31 '18 at 04:39

0 Answers0