Java – Call the MainActivity method from another class (extended broadcast receiver).

Call the MainActivity method from another class (extended broadcast receiver)…. here is a solution to the problem.

Call the MainActivity method from another class (extended broadcast receiver).

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

But I 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

MainActivity specifically states this line of errors

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

But I tried changing getApplicationContext() to “this” and “getActivity()", but it didn’t work

Here is the full 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

}
}

Solution

Use this:

    Intent i = new Intent();
 i.setClassName("com.test", "com.test.MainActivity");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(i); 

Related Problems and Solutions