SORU
7 Temmuz 2011, PERŞEMBE


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
18 HAZİRAN 2013, Salı


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);

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • KittiesMama

    KittiesMama

    10 AĞUSTOS 2008
  • megablueblaster

    megablueblas

    23 HAZİRAN 2006
  • TouchePro

    TouchePro

    27 EYLÜL 2007