我想從其他類(PhoneStateReceiver)調用MainActivity的方法display_notification。從其他類(它擴展廣播接收器)調用MainActivity方法
但得到這個錯誤:
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
意向resultIntent =新意圖(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
}
}
感謝您的回答。我修改了它。 但是我收到錯誤「java.lang.IllegalStateException:系統服務不可用於onCreate之前的活動()」 此錯誤發生在此行「NotificationManager mNotificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);」 – pavan
對,因此最終必須將方法display_notification放入廣播接收器中,因爲尚未創建活動並正在使用系統服務。看到我編輯的答案。 – dhun
謝謝,它的作品! – pavan