Intent filter does not cancel registration even programmatically

I want a toast message when sms is received.

I tried to explicitly specify the intent filter in the manifest, and I partially succeeded, except that I do not want to call it when the application is killed, so, on the advice of some programmers here, I tried to make the broadcast receiver programmatically by placing two buttons in my user interface, namely, registerand unregistertherefore their sole purpose is to register and unregister the broadcast receiver.

My main goal is to start the broadcast receiver, even if the application is background (it meets the condition, the user clicked on the registration button after using any other application).
I used this tutorial: http://www.javacodegeeks.com/2012/09/android-broadcast-receiver.html , but basically changed it using the sms receiver.

here is my code:

package gates.apps.automaticmessageresponder;

import android.app.Activity;
import android.content.ComponentName;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;

 public class MainActivity extends Activity {

SmsReceiver broadcastReceiver=new SmsReceiver();

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

public void register(View view){

    this.registerReceiver(broadcastReceiver, new IntentFilter(
             "android.provider.Telephony.SMS_RECEIVED"));
    Log.e("register","pressed");  

}
public void unRegister(View view){

     this.unregisterReceiver(broadcastReceiver);
     Log.e("unregister","pressed");

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

And another class

package gates.apps.automaticmessageresponder;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;

public class SmsReceiver extends BroadcastReceiver {

// Get the object of SmsManager
final SmsManager sms = SmsManager.getDefault();

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub

    // Retrieves a map of extended data from the intent.
    final Bundle bundle = intent.getExtras();

    try {

        if (bundle != null) {

            final Object[] pdusObj = (Object[]) bundle.get("pdus");

            for (int i = 0; i < pdusObj.length; i++) {

                SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                String phoneNumber = currentMessage.getDisplayOriginatingAddress();

                String senderNum = phoneNumber;
                String message = currentMessage.getDisplayMessageBody();

                Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message);


               // Show alert
                int duration = Toast.LENGTH_LONG;
                Toast toast = Toast.makeText(context, "senderNum: "+ senderNum + ", message: " + message, duration);
                toast.show();

            } // end for loop
          } // bundle is null

    } catch (Exception e) {
        Log.e("SmsReceiver", "Exception smsReceiver" +e);
    }
}
}

I did not change the manifest file except that I added permission to receive SMS . Even I enter the log, the register is pressed and not pressed. I think the problem is that the register receiver button is called even without a click, is this abnormal behavior? or is my perception wrong?

+3
2

BroadcastReceiver , Activity ( ):

public class ExampleMainActivity extends Activity {

   //Activity Stuff

   private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, final Intent intent) {

            //Do things you want with message.

            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("Title");
            builder.setMessage("You may add your things here");
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {

                    dialog.dismiss();
                }
            });
            builder.show();
        }
    };

    protected void onResume() {
        super.onResume();

        // OR YOU CAN REGISTER UNREGISTER AS YOU WANT

        this.registerReceiver(broadcastReceiver, new IntentFilter(
                 "android.provider.Telephony.SMS_RECEIVED"));
    };

    @Override
    protected void onPause() {
        super.onPause();

         // OR YOU CAN REGISTER UNREGISTER AS YOU WANT

         this.unregisterReceiver(broadcastReceiver);
    }
}

:

, :

package gates.apps.automaticmessageresponder;

import android.app.Activity;
import android.content.ComponentName;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;

 public class MainActivity extends Activity {

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

public void register(View view){

    SharedPreferences preferences = context.getSharedPreferences("FILE_NAME", Context.MODE_PRIVATE);
    Editor edit = preferences.edit();
    edit.putBoolean("isRegistered", true);
    edit.commit();

    Log.e("register","pressed");  

}
public void unRegister(View view){

    SharedPreferences preferences = context.getSharedPreferences("FILE_NAME", Context.MODE_PRIVATE);
    Editor edit = preferences.edit();
    edit.putBoolean("isRegistered", false);
    edit.commit();

     Log.e("unregister","pressed");

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

package gates.apps.automaticmessageresponder;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;

public class SmsReceiver extends BroadcastReceiver {

// Get the object of SmsManager
final SmsManager sms = SmsManager.getDefault();

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub

    // Retrieves a map of extended data from the intent.
    final Bundle bundle = intent.getExtras();

    try {

        if (bundle != null) {

            final Object[] pdusObj = (Object[]) bundle.get("pdus");

            for (int i = 0; i < pdusObj.length; i++) {

                SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                String phoneNumber = currentMessage.getDisplayOriginatingAddress();

                String senderNum = phoneNumber;
                String message = currentMessage.getDisplayMessageBody();

                Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message);

        SharedPreferences preferences = context.getSharedPreferences("FILE_NAME", Context.MODE_PRIVATE);
        boolean isRegistered = preferences.getBoolean("isRegistered", false);

                if(isRegistered ) {
                    // Show alert
                    int duration = Toast.LENGTH_LONG;
                    Toast toast = Toast.makeText(context, "senderNum: "+ senderNum + ", 
                                        message: " + message, duration);
                    toast.show();
        }

            } // end for loop
          } // bundle is null

    } catch (Exception e) {
        Log.e("SmsReceiver", "Exception smsReceiver" +e);

    }

}

}
+3

, , , / , . :

MainActivity, Register. ( ), . , Broadcast .

, , . , . .

: . / , . , onReceive, /, , Toast .

+2

All Articles