java – 从其他类调用MainActivity方法(扩展广播接收器)
我正在尝试从其他类(PhoneStateReceiver)调用MainActivity的方法display_notification.
但得到了这个错误:
在MainActivity中专门指向此行的错误 Intent resultIntent = new Intent(getApplicationContext(),MainActivity.class); 但是我试图将getApplicationContext()更改为“this”和“getActivity()”,但它无法正常工作 这是完整的代码 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 } } 解决方法
您没有使用onReceive提供的上下文.尝试将该上下文传递给display_notification,而不是使用活动的上下文,该上下文在您收到广播时可能没有运行.
所以将方法签名更改为: public void display_notification(String incoming_number,Context context) 并且,从onReceive传递上下文,如下所示: mActivity.display_notification(incomingNumber,context); 当你将它传递给Intent时使用这个上下文: Intent resultIntent = new Intent(context,MainActivity.class); EDITED 将整个方法放在接收器中并使用onReceive提供的上下文 要么, 将该行更改为: NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 重要的部分是context.getSystemService,其中上下文来自onReceive. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |