Java – call mainactivity method (extend broadcast receiver) from other classes
I'm trying to call mainactivity's method display from another class (phonestatereceiver)_ notification.
But got this error:
Error pointing to this row in mainactivity
Intent resultIntent = new Intent(getApplicationContext(),MainActivity. class);
But I tried to change getapplicationcontext () to "this" and "getactivity ()", but it didn't work properly
This 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
}
}
Solution
You do not use the context provided by onReceive Try to pass the context to display_ Notification instead of using the active context, which may not run when you receive the broadcast
So change the method signature to:
public void display_notification(String incoming_number,Context context)
In addition, the context is passed from onReceive as follows:
mActivity.display_notification(incomingNumber,context);
Use this context when you pass it to intent:
Intent resultIntent = new Intent(context,MainActivity.class);
EDITED
Put the entire method in the receiver and use the context provided by onReceive
or
Change the row to:
notificationmanager mnotificationmanager =
(notificationmanager) context.getSystemService(Context.NOTIFICATION_SERVICE);
The important part is context Getsystemservice, where the context comes from onReceive
