java – 从其他类调用MainActivity方法(扩展广播接收器)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 从其他类调用MainActivity方法(扩展广播接收器),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2568字,纯文字阅读大概需要4分钟。
内容图文
![java – 从其他类调用MainActivity方法(扩展广播接收器)](/upload/InfoBanner/zyjiaocheng/745/ed6f7c067e3747e1b6c9084e2011e02f.jpg)
我正在尝试从其他类(PhoneStateReceiver)调用MainActivity的方法display_notification.
但得到了这个错误:
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中专门指向此行的错误
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.
内容总结
以上是互联网集市为您收集整理的java – 从其他类调用MainActivity方法(扩展广播接收器)全部内容,希望文章能够帮你解决java – 从其他类调用MainActivity方法(扩展广播接收器)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。