2016-03-25 16 views
0

Uygulamam için başlatıcı etkinliği LaunchActivity olarak adlandırılmıştır. Bu aktivitenin içinde kullanıcının günlüğe kaydedilip kaydedilmediğini kontrol ediyorum. Evetse, kullanıcıyı doğrulamak için bir ağ çağrısı yapılır ve her şey yolundaysa, MainActivity başlatılır. Kullanıcı ilk kez uygulamayı çalıştırırsa veya kullanıcı doğrulama başarısız olursa, LoginActivity çalışır. Uygulama bildirimlerini aldığınıAndroid - bildirimden ana etkinliği yeniden aç

private void start(Class<? extends Activity> startActivity) { 

    Intent intent = new Intent(this, startActivity); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
    finish(); 
    startActivity(intent); 
} 

:

İçinde LaunchActivity uygun etkinliği çalışan işlevi yoktur. Bildirimi tıkladıktan sonra uygulamayı açmak veya arka planda ise en üstte getirmek istiyorum. Bildirim niyet sorumlu

Kodu:

Intent intent = new Intent(context, LaunchActivity.class); 
    intent.putExtra("SHOW_NOTIFICATION_LIST", ""); 
    intent.setAction(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_LAUNCHER); 

    PendingIntent notificationIntent = PendingIntent.getActivity(
      context, 
      0, 
      intent, 
      0); 
    builder.setContentIntent(notificationIntent); 

    Notification notification = builder.build(); 

sorun tıklamadan sonra benim şimdiki uygulamasıyla, LaunchActivity MainActivity arka plan üzerinde olduğunda bile yeniden olmasıdır. Arka plan üzerinde çalışan bir etkinlik olmadığında (uygulama çalışmıyorsa), beklemedeki amacın yalnızca MainActivity (LaunchActivity ve valdation olmadan) nasıl yeniden başlatılacağını anlayamıyorum VEYA LaunchActivity'u başlatın. Her türlü yardım için çok minnettar olurum.

düzenleme: set bayrak: true

  • ACTION_DESTROYED için ayarlanan bayrak:

     <activity android:name=".activities.LaunchActivity" > 
         <intent-filter> 
          <action android:name="android.intent.action.MAIN" /> 
    
          <category android:name="android.intent.category.LAUNCHER" /> 
         </intent-filter> 
        </activity> 
        <activity 
         android:name=".activities.MainActivity" 
         android:launchMode="singleTop" 
         android:screenOrientation="userPortrait" /> 
        <activity 
         android:name=".activities.LoginActivity" 
         android:excludeFromRecents="true" 
         android:launchMode="singleTop" 
         android:noHistory="true" 
         android:screenOrientation="userPortrait" 
         android:windowSoftInputMode="adjustResize" > 
        </activity> 
    
  • +0

    Lütfen Manifest dosyanızı gönderin. –

    +0

    soruya eklendi – Dominik

    cevap

    0

    saçma davranışın nedeni LaunchActivity bitirme çünkü sen

    private void start(Class<? extends Activity> startActivity) { 
    
        .... 
        finish(); // This is the culprit 
        .... 
    } 
    

    start()start() den finish() çıkarın çağırdığınızda ve beklendiği gibi iyi çalışır olmasıdır.

    sonra senin PendingIntent başlatmak için MainActivity yerine kullanıcı zaten açtıysa LaunchActivity

    Intent intent = new Intent(context, MainActivity.class); 
    

    ait Ve MainActivity's onCreate() kontrol altında değiştirmek, çünkü uygulama davranışının finish() çıkaramıyorsanız. Eğer değilse, LoginActivity numarasına gidin.

    +0

    Ben bu sorun olduğunu düşünmüyorum - MainActivity başlamadan önce artık gerekli olduğundan başlatma etkinliğini bitirmem gerekiyor - sadece ara etkinlik – Dominik

    +0

    Cevabımı düzenledim . –

    +0

    Ben sadece bitirdim() ve iyi çalışıyor. ama bunun neden böyle çalıştığını açıklayabilir misiniz? Bitiş() olmaksızın, LaunchActivity hala canlıdır, bu nedenle neden niyetleri tetiklendikten sonra, MainActivity, LaunchActivity yerine başa getirilir? (Benim durumumda LaunchActivity de uygulama sıçrama görünümüne sahip) – Dominik

    0

    üç farklı niyet

    • ACTION_CREATED tepki bir BroadcastReceiver oluşturun: manifest'te iç

      Faaliyetleri beyanı false

    • ACTION_LAUNCH: bayrak, MainActivity başlangıç, aksi takdirde başlangıç ​​LaunchActivity

    (bayrak ör sharedpreferences bir boolean veya bir statik alanı) MainActivity içinde

    : onCreate yılında

    • : göndermek ACTION_CREATED yayın onDestroy yılında
    • : göndermek ACTION_DESTROYED yayın

    bildirim bir ACTION_LAUNCH yayını göndermelidir .

    Not: eylemler istediğiniz gibi adlandırılabilir. Ayrıca paket adıyla da başlamalılar, böylece diğer uygulamalara müdahale etmeyeceksiniz.

    +0

    kulağa hoş geliyor - bununla sadece MainActivity üzerindeki yaşam döngüsünü kontrol ediyorum ancak kullanıcı bildirimi tıkladığında yayın niyetini bildirmek için abble olacağım mı? – Dominik

    +0

    sadece "PendingIntent.getActivity" yerine "PendingIntent.getBroadcast" kullanın – F43nd1r

    İlgili konular