我有一个应用程序会在启动后延迟几秒钟自动启动。顺便说一句:这不是邪恶的!用户必须自己启用!当我现在点击应用程序的图标时,我希望打开已在启动时启动的相同实例。我不希望应用程序重新启动。但这就是现在发生的事情。
背景:我正在向 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 );
}
}
奇怪的是,有时它似乎按预期工作(没有重新启动),但有时却没有!
谢谢!
伯恩德