Android:来自接收器的startActivity也启动MAIN活动(action.MAIN / category.LAUNCHER)

时间:2013-02-15 12:10:13

标签: android

当我从这样的接收器使用startActivity时:

public void onReceive(final Context context, final Intent intent) {
        Intent i = new Intent();
        i.setClass(context, NewClass.class);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);  
        i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);  
        i.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        context.startActivity(i);
}
某些设备中的

(例如Galaxy S2 android:4.0.4) - 它也在MAIN活动的背景中启动(使用action.MAIN和category.LAUNCHER)。

- 修改 -

AndroidManifest:

<application android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:debuggable="true">
    <receiver android:name="com.my.app.MyBroadcastReceiver" android:enabled="true">
        <intent-filter android:priority="99999">
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
    </receiver>
    <activity android:name="com.my.app.Main">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="com.my.app.NewClass">
        <intent-filter>
            <action android:name="android.intent.action.NEWSCLASS" />
        </intent-filter>
    </activity>
</application>

为什么?

2 个答案:

答案 0 :(得分:0)

这是因为在AndroidManifest.xml中,活动指定了两件事:

              <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>

答案 1 :(得分:0)

发布您的清单文件可以提供帮助

在清单中删除NewClass的intent过滤器。 更新:意图过滤器不是必需的,因为您制定了明确的意图。 Intent-filter对隐式意图很有用。

并尝试删除在startActivity之前设置的所有标志。 更新:看看intent.setAction