我有一个应用程序会在启动后延迟几秒钟自动启动。顺便说一句:这不是邪恶的!用户必须自己启用!当我现在点击应用程序的图标时,我希望打开已在启动时启动的相同实例。我不希望应用程序重新启动。但这就是现在发生的事情。
背景:我正在向 TextView 写入一些调试信息。当应用程序在启动时启动时,它会立即进入后台moveTaskToBack(true),因为它当然不应该覆盖屏幕。用户应该看到 IDLE 屏幕。因此,只有在手动打开应用程序时,应用程序(以及此输出)才能变得可见。
这是 AndroidManifest.xml:
<application android:icon="@drawable/fritzbox"
             android:label="@string/app_name"
             android:allowTaskReparenting="true"
             android:persistent="true">
    <uses-library android:name = "com.google.android.maps"              />
    <receiver android:name=".BootUpReceiver">
        <intent-filter>
            <action   android:name = "android.intent.action.BOOT_COMPLETED" />
            <category android:name = "android.intent.category.DEFAULT"      />
        </intent-filter>
    </receiver>
    <activity android:name =".WiFiOnDemandActivity"
              android:label="@string/app_name"
              android:allowTaskReparenting="true"
              android:launchMode="singleInstance">
        <intent-filter>
            <action   android:name = "android.intent.action.MAIN"       />
            <category android:name = "android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
<uses-permission android:name="android.permission.INTERNET"               />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"   />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.VIBRATE"                />
<uses-permission android:name="android.permission.READ_CONTACTS"          />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"   />
<uses-permission android:name="android.permission.WAKE_LOCK"              />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
如您所见,我已经尝试过android:launchMode,android:allowTaskReparenting和android:persistent. 接收 BOOT_COMPLETED 广播的广播接收器会创建一个 PendingIntent,它与 AlarmManager 一起调度。所以应用程序在启动START_DELAY后 15 秒 ( ) 启动。这是代码:
public class BootUpReceiver extends BroadcastReceiver implements Defines
{       
    private AlarmManager  mAlarmManager  = null;
    private Intent        mIntent        = null;
    private PendingIntent mPendingIntent = null;
    @Override
    public void onReceive( final Context context, final Intent intent)
    {
        mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE   );
        mIntent       = new Intent ( context, WiFiOnDemandActivity.class );         
        mIntent.setAction(intent.getAction());
        mIntent.addFlags ( Intent.FLAG_ACTIVITY_NEW_TASK );
        mPendingIntent       = PendingIntent.getActivity( context, 0, mIntent, 0);
        mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + START_DELAY, mPendingIntent );
    }
}
奇怪的是,有时它似乎按预期工作(没有重新启动),但有时却没有!
谢谢!
伯恩德