Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calling MainActivity method from other classes (which extend broadcast receiver)

I'm trying to call the method display_notification of MainActivity from other class (PhoneStateReceiver).

But got this error:

java.lang.RuntimeException: Unable to start receiver com.weekendproject.roshu.spamblocker.PhoneStateReceiver: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference

Error was specially pointed to this line in MainActivity

Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class);

However i tried to change getApplicationContext() into "this" and "getActivity()", But its not working

Here is the complete code

MainActivity.java

public class MainActivity extends ActionBarActivity {

    public void display_notification(String incoming_number) {

    NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(getApplicationContext())
                    .setSmallIcon(R.drawable.ic_action)
                    .setContentTitle("SpamBlocker alert !!")
                    .setContentText("SpamBlocker blocked number : " + incoming_number);

    // **Error occured in following line**
    Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class);

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(getApplicationContext());
    stackBuilder.addParentStack(MainActivity.class);
    stackBuilder.addNextIntent(resultIntent);
    PendingIntent resultPendingIntent =
            stackBuilder.getPendingIntent(
                    0,
                    PendingIntent.FLAG_UPDATE_CURRENT
            );
    mBuilder.setContentIntent(resultPendingIntent);
    NotificationManager mNotificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    Random r = new Random();
    int rand = r.nextInt(1000);
    mNotificationManager.notify(rand, mBuilder.build());
    }
}

PhoneStateReceiver.java

public class PhoneStateReceiver extends BroadcastReceiver {

    MainActivity mActivity;

    @Override
    public void onReceive(Context context, Intent intent) {
        mActivity = new MainActivity();
        mActivity.display_notification(incomingNumber);           // call main activity methods

    }
}
like image 613
pavan Avatar asked Nov 20 '25 14:11

pavan


1 Answers

Use this:

    Intent i = new Intent();
 i.setClassName("com.test", "com.test.MainActivity");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(i);
like image 122
Vivek_Neel Avatar answered Nov 22 '25 04:11

Vivek_Neel



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!