Я пытаюсь внедрить уведомление в своем приложении на основе некоторых событий. Все в порядке, кроме контекста активности, в которой мне нужно инициировать уведомление.контекст глобальной активности в приложении
У меня есть способ сделать некоторые вычисления в классе non-activity, а затем я вызываю класс уведомлений, передавая контекст, но это не похоже на работу, или я сделал что-то неправильно.
Вот мой код
Класс активности
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_s);
acti = sActivity.this;
sSingleton.getInstance().init(sActivity.this);
}
public static sActivity get(){
return acti;
}
sActivity acti = null;
Я пытаюсь оба пути через signalton или статический метод
Вот мой signalton
public class sSingleton {
private static sActivity appContext;
private sSingleton(){}
public void init(sActivity context){
if(appContext == null){
appContext = context;
}
}
public static sActivity getContext(){
return appContext;
}
public static sActivity get(){
return getInstance().getContext();
}
private static sSingleton instance;
public static sSingleton getInstance(){
return instance == null ?
(instance = new sSingleton()):
instance;
}
}
Мой notitification класс
public class sNotification {
public sNotification(sActivity activity, ArrayList<String> data) {
this.activity = activity;
this.allData = new ArrayList<String>();
this.allData = data;
createNotification();
}
public void createNotification(){
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(activity)
.setSmallIcon(R.drawable.ic_stat)
.setContentTitle("New Data").setColor(Color.RED)
.setContentText(type + " : "+ value);
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
inboxStyle.setBigContentTitle("New Details");
for(int i = 0; i < allData.size(); i++){
inboxStyle.addLine(type + ": "+ value);
}
Intent notificationIntent = new Intent(sSignalton.get(), sActivity.class); //crashing here
notificationIntent.putExtra("Notification", "Notify");
PendingIntent contentIntent = PendingIntent.getActivity(sSignalton.get(), 0, notificationIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setStyle(inboxStyle);
mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
mBuilder.setContentIntent(contentIntent);
// Add as notification
NotificationManager manager = (NotificationManager) sApplication.get().getSystemService(sActivity.get().NOTIFICATION_SERVICE);
manager.notify(001, mBuilder.build());
}
sActivity activity;
public static String TAG = "sNotification";
}
Итак, главное, что я не знаю, как получить контекст sActivity здесь в классе уведомлений, я пробовал как сигнальный, так и статический метод sActivity.get(), но когда приложение уничтожено, а условие уведомления становится истинным, сбои приложений. Приложение отключается, когда приложение не находится на переднем плане, работают только службы.
Сохранение статической ссылки контекста активности настолько ошибочно. Возможно, вам стоит подумать о дизайне. – waqaslam
любое предложение сделать это в чистом виде ...? – user3290805
Вы должны иметь возможность передать контекст службы в уведомление. –