5

我有两个无法解决的活动问题:

我有一个使用警报管理器编写警报的 A 活动,警报接收器在 3 秒内启动一个只有一个完成按钮的 B 活动。

如果我从 A 对警报管理器进行编程并按返回按钮完成此活动,则 B 活动将在 3 秒内出现。一切正常。问题如下:如果我通过启动器重新打开应用程序,系统会启动 A 活动,但如果我通过长按主页按钮(最近使用的任务)启动应用程序,我总是打开 B 活动。我需要当我完成 B 活动时,如果我从任何地方重新打开应用程序,A 活动应该打开。

我试图将 noHistory 添加到活动 B,但问题仍然存在。

这是A活动的代码:

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

}

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

}

报警接收器:

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

}

显现:

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

谢谢你的时间。

4

1 回答 1

1

你写了:

如果我从 A 对警报管理器进行编程并按后退按钮完成此活动,则在 3 秒内会出现 B 活动。一切正常。

注意:您现在有 1 个正在运行的任务,其中 ActivityB 作为其根活动。

问题如下:如果我通过启动器重新打开应用程序,系统会启动一个活动,

注意:当您从启动器启动应用程序时,这将启动另一个以 ActivityA 作为其根 Activity 的任务。现在您有 2 个正在运行的任务:一个以 ActivityA 作为根,一个以 ActivityB

...但是如果我通过长按主页按钮(最近使用的任务)启动应用程序,我总是打开 B 活动。

注意:当长按 HOME 按钮并从最近使用的任务中进行选择时,您选择的是由以 ActivityB 为根的 AlarmReciver 启动的任务

我需要当我完成 B 活动时,如果我从任何地方重新打开应用程序,A 活动应该打开。

您应该能够通过在<activity>ActivityB 的标签中设置以下内容来获得所需的行为:

android:excludeFromRecents="true"

这将确保当您以 ActivityB 作为其根 Activity 启动任务时,该任务不会显示在最近任务列表中。这样,启动应用程序的唯一方法是从主屏幕,或者从最近任务列表中选择它(这将包含以 ActivityA 作为根启动的任务)。

于 2012-12-20T16:37:18.230 回答