Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can i create Alert and Toast inside a contentObserver?

I'm unable to write the code to create alert and toast inside a ContentObserver of sms. I could not get the context for my ContentObserver. Somebody please help me. Thanks in advance.

 MyObserver yourObserver = new MyObserver(new Handler());

        ContentResolver contentResolver = this.getContentResolver();
        contentResolver.registerContentObserver(Uri.parse("content://sms"),true, yourObserver);

&

class YourObserver extends ContentObserver {

    //Context context = new ContentObserver()
    AlertDialog.Builder builder;
    AlertDialog alert;
    public YourObserver(Handler handler) {
        super(handler);
    }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
       Toast.makeText(???,"SENT..!!", Toast.LENGTH_LONG).show();
        System.out.println("Hey =++++++++++++++++++++++_______+++++++++++++++++++++++++++++");
        builder = new AlertDialog.Builder(???);
        builder.setMessage("Are you sure??");
        builder.setCancelable(false);
        builder.setPositiveButton("Yes",new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(???, "Okay",Toast.LENGTH_LONG).show();
            }
        });

        builder.setNegativeButton("No",new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                alert.cancel(); 
            }
        });
        alert = builder.create();
        alert.show();
    }
}
like image 954
Kishore Avatar asked Dec 07 '25 21:12

Kishore


2 Answers

You can use handler.post() to show Toast.

public SMSSentObserver(Handler handler, Context context) {
    super(handler);
    this.handler = handler;
    m_Context = context;
}

@Override
public void onChange(boolean selfChange) {
    super.onChange(selfChange);
    handler.post(new Runnable() {

        @Override
        public void run() {

            Toast.makeText(m_Context, "Toast", Toast.LENGTH_SHORT).show();
        }
    });
like image 170
Mikonos Avatar answered Dec 10 '25 11:12

Mikonos


You can pass context of your Activity to the ContentObserver Class,

ContentResolver observer = this.getContentResolver();
        observer.registerContentObserver(SMS_URI, true,
                                   new MyObserver(new Handler(), this));

And the in the MyObserver class use the context,

   Activity mActivity;
    public MyContentObserver(Handler handler, Activity mActivity) {
        super(handler);
        this.mActivity= mActivity;
    }
like image 21
Lalit Poptani Avatar answered Dec 10 '25 11:12

Lalit Poptani



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!