일부 이벤트를 기반으로 응용 프로그램에 알림을 구현하려고합니다. 알림을 실행하는 데 필요한 활동의 컨텍스트를 제외한 모든 것이 좋습니다.응용 프로그램의 전역 작업 컨텍스트
비 활동 클래스에서 계산을 수행하는 방법이 있고 컨텍스트를 전달하여 알림 클래스를 호출하지만 제대로 작동하지 않거나 잘못되었습니다. 여기
내 코드입니다는 활동 클래스
@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 컨텍스트를 얻는 방법을 모르겠다. 나는 signalton과 sActivity.get() 정적 메서드를 모두 시도했지만 응용 프로그램이 파괴되고 알림 조건이 true가되면 응용 프로그램이 충돌합니다. 앱이 포 그라운드에 있지 않으면 서비스가 작동하지 않고 서비스 만 실행됩니다.
활동 컨텍스트의 정적 참조 보유가 너무 잘못되었습니다. 아마도 디자인 접근법을 다시 생각해야합니다. – waqaslam
깨끗한 방법으로 해보기위한 제안 ...? – user3290805
통지에 서비스 컨텍스트를 전달할 수 있어야합니다. –