如何在不通过父活动的情况下启动子活动?

时间:2014-03-28 08:53:44

标签: android android-activity android-manifest

在我的应用中,我需要两项活动和一项后台服务。作为主要活动的第一个活动(活动A)用于启动/停止服务。该服务用于在需要启动活动时启动活动(活动B)(即使活动A未运行,服务也可以启动活动B)。

  • 当服务人员启动活动B时,我可以在几毫秒内在屏幕上看到活动A已启动并在活动B显示之前消失。
  • 从活动B调用finish()时,这是屏幕上显示的活动A,我希望显示在活动B之前启动的最后一项活动。

我的问题是如何从服务启动活动B(作为独立活动)而不通过活动A(这是主要活动)?

这是我用来从服务启动Activity B的代码:

Intent intent = new Intent(this, ActivityB.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

这是我的清单:

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >        

    <!-- Activity A -->
    <activity
        android:name="ActivityA"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <!-- Activity B -->
    <activity
        android:name="ActivityB"
        android:excludeFromRecents="true"
        android:exported="true"
        android:immersive="true"
        android:launchMode="singleTask" />

    <!-- Service -->
    <service
        android:name="Service"
        android:enabled="true"
        android:exported="true" >
    </service>
</application>

提前致谢

1 个答案:

答案 0 :(得分:2)

Just Place this code in your Activity A


 private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                Log.d("Service","Message");
                ActivityA.this.finish();
            }
        };

        @Override
        protected void onResume() {
            // TODO Auto-generated method stub
            super.onResume();
            LocalBroadcastManager.getInstance(this).registerReceiver(
                    mMessageReceiver, new IntentFilter("finishA"));
        }

//将此代码放在Activity B onCreate()方法

 @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

             Intent intent = new Intent("finishA");                    

             LocalBroadcastManager.getInstance(ActivityB.this).sendBroadcast(intent);
        }