nasıl yapılır programlama yoluyla "yeniden" uygulaması android?
Öncelikle, gerçekten/Android Uygulama öldürüp yeniden gerektiğini biliyorum. Kullanın benim durumumda bir sunucu istemci için belirli bir bilgi gönderir fabrika sıfırlama başvurum için belirli bir durumda istiyorum. Kullanıcı sadece sunucu üzerindeki uygulama (yani birden fazla cihaz verilmez) BİR örneği ile kaydedilebilir. Eğer başka bir örnek "giriş"-kilit kullanıcı tüm diğer kopyalarını verileri silmek için sonra (fabrika sıfırlama), tutarlılığı korumak için. o gelirse Mümkündür zorla almak kilit, çünkü kullanıcı olabilir app silmek ve yeniden bir karar sonucu farklı bir örnek kimliği ve kullanıcı olmaz mümkün için ücretsiz kilit artık. Bu nedenle zorla kilit elde etmek mümkündür.
Bu olasılık güç nedeniyle her zaman kilidi vardır bunun somut bir örneği kontrol etmeliyiz. Sunucu (neredeyse) her isteği yapılır. Sunucu gönderebilir "yanlış-kilit-id". Eğer bu tespit edilirse, istemci uygulaması, her şeyi silmek gerekir.
Bu durum kullanın. Uygulama-soru: hiç
Giriş Activity
L veya app Activity
ana B başlatan Activity
A sharedPrefs bir alana bağlı. L veya B başladıktan sonra sadece L veya B çalışmadığı için kendi kendine kapanır.
Yani kullanıcı zaten oturum açmış durumda B şimdi çalışıyor.
B C. C aramaları başlar bu sonuçları IntentService
D. startService
stack:
(A) >B >C >D
D onHandleİntent yönteminden bir olay ResultReceiver R. a gönder
R şimdi kullanıcı fabrika ayarlarına geri döndürülmesi için tercih edebileceği bir iletişim sağlayan uygulama (sil db, sharedPrefs vb.) tarafından bu olay işleme
Uygulaması (tüm faaliyetler kapatmak için yeniden ve yeniden başlamak istiyorum daha sonra Giriş Activity
L başlattı ve kendisini bitirir fabrika sıfırlama: sonra
(A) >L
Bu gibi İletişim kişinin özelliği-yöntem görünüyor:
@Override
public void onClick(DialogInterface dialog, int which) {
// will call onCancelListener
MyApplication.factoryReset(); // (deletes db, clears sharedPrefs etc.)
Intent i = new Intent(MyApp.getContext(), A.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
MyApp.getContext().startActivity(i);
}
Ve MyApp
sınıf bu.
public class MyApp extends Application {
private static Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
public static Context getContext() {
return context;
}
public static void factoryReset() {
// ...
}
}
Şimdi Sorunun varsa FLAG_ACTIVITY_NEW_TASK
kullanırsam Faaliyetleri B ve C hala çalışıyor. Eğer oturum Açma arka btn Activity
vurursam C görüyorum ama ana ekrana geri dönmek istiyorum.
Eğer FLAG_ACTIVITY_NEW_TASK
set yaparsam hata alıyorum:
07-07 12:27:12.272: ERROR/AndroidRuntime(9512): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
Yapamam Faaliyetleri' ServiceIntent
D de AlarmManager
tarafından başlatılan bir arka plan görevi olarak adlandırılabilir. çünkü Context
kullanın
Nasıl etkinlik yığını olmak için bu çözebilir: (A) >L ?
CEVAP
PendingIntent
Kur başlangıç başlatılması gelecekte, etkinlik ve uygulama kapatın kullanabilirsiniz
Intent mStartActivity = new Intent(context, StartActivity.class);
int mPendingIntentId = 123456;
PendingIntent mPendingIntent = PendingIntent.getActivity(context, mPendingIntentId, mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() 100, mPendingIntent);
System.exit(0);
Nasıl simgeler ve semboller bir "...
İlk metin ile bir Android Spinner yapm...
Nasıl programlama yoluyla Android bir ...
Android: klavye rozette girin nasıl &q...
Nasıl programlama yoluyla Android düğm...