Kalıcı bir internet bağlantısı gerektiren bir uygulama üzerinde çalışıyorum. İnternet bağlantısı yoksa, kullanıcının uygulamadan çıkış yapmasını istiyorum (giriş ekranına alınır). Ağ bağlantısını algılayan bir ağ alıcı sınıfım var. Bu sınıfın ya yığının üstündeki etkinliği sonlandırmak VEYA yeni bir giriş etkinliğini başlatmak ve tüm geçmiş yığınını silmek istiyorum. Başka bir sınıfın bir aktivitesini bitirme
Sorun, önalan etkinliğini alıcı sınıfımın içinden bitiremediğim ve ağ başarısız olduğunda kullanıcının hangi etkinlikte olduğunu bilmenin bir yolu yok. Ve bu sınıftan yeni bir giriş etkinliği başlatıyorsam, kullanıcı "geri" tuşuna bastığında, uygulamaya geri alınır (eğer bir ağa yeniden bağlanırsa), ancak uygulama oturum açmamış ve çökmez.
NetworkStateReceiver sınıfımdan yeni bir giriş etkinliği başlatırken myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK || FLAG_ACTIVITY_CLEAR_TOP);
kullanmayı denediniz. Ama bu işe yaramıyor, benim anlayışım için bu tek faaliyetin başladığım (oturum açma) olduğu yeni bir görev yaratıyor, ancak diğer tüm faaliyetlerle eski görev sağlam kalıyor.
yüzden gerekir:
bir şekilde konulmaya talip bir şekilde -veya bir sınıf
bir ön plan aktiviteyi bitirmek için bir sınıftan yeni bir faaliyet başlatmak ve etkinlik yığınını
boşaltma içinpublic class NetworkStateReceiver extends BroadcastReceiver{
public void onReceive(Context context, Intent intent) {
// super.onReceive(context, intent);
Log.d("app","Network connectivity change");
if(intent.getExtras()!=null) {
Login.apiKey = null;
NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);
if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) {
Log.i("app","Network "+ni.getTypeName()+" connected");
}
}
if(intent.getExtras().getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE) && !Login.loginActive) {
Log.d("app","There's no network connectivity");
Toast.makeText(context, "No internet connection. Logging out", Toast.LENGTH_LONG).show();
//logout
Receiver.engine(context).halt();
Receiver.mSipdroidEngine = null;
Receiver.reRegister(0);
new Thread(ChatList.runnable).interrupt();
ChatList.buddyList.clear();
Login.apiKey = null;
Log.i("Logout", "Logged out!");
Login.loggedOut = true;
Intent myIntent = new Intent(context, Login.class);
myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
// myIntent.addFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
context.startActivity(myIntent);
}
}
}
:
İşte buna değer ne için alıcı kodÇÖZÜM: Tüm faaliyetlerinden Geçmiş referans
//random user_activity
@Override
protected void onPause() {
super.onPause();
NetworkStateReceiver.curActivity = null;
}
@Override
protected void onResume() {
super.onResume();
NetworkStateReceiver.curActivity = user_activity.this; //edited : getParent() doesn't always work
}
alıcı ve onReceive()
ağ alıcıda:
if(curActivity != null)
{
curActivity.finish();
}
Siz efendim, parlak! Mevcut aktiviteden alıcıya bir referans geçti ve işe yaradı! Teşekkürler! – Sebek