2012-09-26 8 views
5

Mam problem z dwoma działaniami, że nie mogę rozwiązać:Działalność rozpoczęła od odbiornika transmisji, zachowuje się ostatnio zadań pomimo zostały zakończone

Mam aktywności że programy alarm z alarmem menedżer, w ciągu 3 sekund odbiornik alarmu uruchamia działanie B, które ma tylko przycisk zakończenia.

Jeśli zaprogramuję menedżera alarmów z A i zakończę tę czynność, naciskając przycisk Wstecz, w ciągu 3 sekund pojawi się aktywność B. Wszystko normalne. Problem jest następujący: jeśli ponownie uruchomię aplikację za pomocą programu uruchamiającego, system rozpocznie działanie A, ale jeśli uruchomię aplikację przez długie naciśnięcie przycisku home (ostatnio używane zadania), zawsze otwieram działanie B. Potrzebuję tego, gdy kończę działanie B, jeśli ponownie otworzę aplikację z dowolnego miejsca, działanie A powinno się otworzyć.

Próbowałem dodać noHistory do działania B, ale problem jest kontynuowany.

Oto kod A aktywności:

public class ActivityA extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_a); 

    Button b=(Button) findViewById(R.id.initTimer); 
    b.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      programTimer(); 
     } 
    }); 
} 

private void programTimer() { 
    AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(this, AlarmReciver.class); 
    PendingIntent pIntent = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
    manager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+3000 , pIntent); 
} 

}

Aktywność B.

public class ActivityB extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_b); 

    Button button= (Button) findViewById(R.id.bFinish); 
    button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      finish(); 
     } 
    }); 
} 

}

AlarmReciver:

public class AlarmReciver extends android.content.BroadcastReceiver { 
private static final String DEBUG_TAG="ReceptorAlarma"; 
@Override 
public void onReceive(Context context, android.content.Intent intent) {  
    //lanzar activity 
    Intent i = new Intent(context, ActivityB.class); 
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(i);  
} 

}

Oczywisty:

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".ActivityA" 
     android:label="@string/title_activity_activity" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity android:name=".ActivityB">    
    </activity> 

    <receiver android:name=".AlarmReciver" > 
    </receiver> 
</application> 

dzięki za poświęcony czas.

Odpowiedz

1

Napisałeś:

Gdybym zaprogramować Alarm Manager z A i zakończyć tę działalność naciśnięcie przycisk wstecz, w 3 sekundy pojawi się działalność B. Wszystko normalne.

Uwaga: Masz teraz 1 uruchomione zadanie, którego AktywnośćB jest aktywnością podstawową.

Problem jest następujący: jeśli ponownie otworzyć aplikację przez wyrzutni, system rozpoczyna działalność,

Uwaga: Po uruchomieniu aplikacji z wyrzutni to, uruchamia kolejne zadanie z aktywnością A jako główną aktywnością. Teraz masz 2 zadań bieżących: jeden z ActivityA jako root i jeden z ActivityB

... ale jeśli mogę uruchomić aplikację przez długie naciśnięcie przycisku home (ostatnio używany zadania) Ja zawsze otwarte działalność B .

Uwaga: Przy długim naciśnięciu przycisku HOME i wybierając z ostatnio używanych zadań, to wybiera zadanie, które zostało zapoczątkowane przez AlarmReciver który ma ActivityB jako nasady

muszę, że gdy Kończę działanie B, jeśli ponownie otworzę aplikację z dowolnego miejsca, aktywność A powinna się otworzyć.

Powinieneś być w stanie uzyskać żądane zachowanie poprzez ustawienie następujących w <activity> tag ActivityB:

android:excludeFromRecents="true" 

To zagwarantuje, że po uruchomieniu zadania z ActivityB jako działalność korzeniowego , zadanie będzie nie wyświetlane na liście ostatnich zadań. W ten sposób jedynym sposobem uruchomienia aplikacji będzie ekran HOME lub wybranie go z listy ostatnich zadań (które będą wykonywać tylko te zadania, które zostały uruchomione z aktywnościąA jako root).

Powiązane problemy