Я хотел отобразить уведомления, которые публикуются другими приложениями в строке состояния.Итак, я сделал кнопку.Нажатие на кнопку вызовет метод executeButtonClick()
. Мой код :
public void executeButtonClick(View view) {
NLService nlService = new NLService();
if(nlService.getActiveNotifications()!=null) {
Toast.makeText(MainActivity.this,"InsideIf",Toast.LENGTH_SHORT).show();
for (StatusBarNotification sbn : nlService.getActiveNotifications()) {
String temp = "Package Name: " + sbn.getPackageName() +
"\n" + "Title: " + sbn.getNotification().extras.getString("android.title") + "\n" +
"Text: " + sbn.getNotification().extras.getCharSequence("android.text");
String newText = textView.getText().toString() + temp;
textView.setText(newText);
}
}
}
Но уведомление не отображается, и я получаю исключение нулевого указателя:
"Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference"
в следующемстрока: activity.executeButtonClick(com.example.asus.notificationtest.MainActivity.textView);
метода onNotificationPosted()
, упомянутого ниже:
public class NLService extends NotificationListenerService {
Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
if(MainActivity.textView != null)
activity.executeButtonClick(com.example.asus.notificationtest.MainActivity.textView);
//Toast.makeText(this,"Post from: "+sbn.getPackageName(),Toast.LENGTH_SHORT).show();
}
@Override
public void onNotificationRemoved(StatusBarNotification sbn) {
//Toast.makeText(this,"Post from: "+sbn.getPackageName(),Toast.LENGTH_SHORT).show();
}