我的应用程序处于运行模式[前景] ,用户点击主页按钮,这会将应用程序置于后台[并仍在运行] 。我的应用程序中有警报功能,它会启动。我想要的是当我的闹钟响起时,我希望将我的后台运行应用程序放在前台并从最后状态开始。
<application
android:name="nl.ziggo.android.state.management.MainEPGApp"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:largeHeap="true"
android:logo="@drawable/app_logo" >
<activity
android:name=".SplashScreen"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="nosensor"
android:theme="@style/Theme.Sherlock" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Starter"
android:configChanges="orientation|screenSize"
android:screenOrientation="behind"
android:launchMode="singleTop"
android:uiOptions="none"
android:windowSoftInputMode="adjustPan" />
</application>
答案 0 :(得分:56)
Intent intent = new Intent(context, MyRootActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
您应该使用MyRootActivity
的 root 活动。
这会将现有任务带到前台,而不会实际创建新的Activity。如果您的应用程序没有运行,它将创建一个MyRootActivity
的实例并启动它。
修改强>
我将Intent.FLAG_ACTIVITY_SINGLE_TOP
添加到Intent中以使其真正起作用!
第二次编辑
还有另一种方法可以做到这一点。你可以模拟&#34;启动&#34;应用程序与用户从可用应用程序列表中选择应用程序时启动应用程序的方式相同。如果用户启动已在运行的应用程序,Android只会将现有任务带到前台(这就是您想要的)。这样做:
Intent intent = new Intent(context, SplashScreen.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // You need this if starting
// the activity from a service
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(intent);
答案 1 :(得分:7)
对我有用的组合是使用:
Intent bringToForegroundIntent = new Intent(context, RootActivity.class);
bringToForegroundIntent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(bringToForegroundIntent);
如果您在从启动器图标启动活动时检查设备上的日志,则这是传递启动应用程序或将其移回前台的意图,例如,用户点击了主页按钮。
答案 2 :(得分:7)
您可以使用以下代码将应用程序置于最前面:
private void bringApplicationToFront()
{
Log.d(TAG, "====Bringging Application to Front====");
Intent notificationIntent = new Intent(this, MainActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
try
{
pendingIntent.send();
}
catch (CanceledException e)
{
e.printStackTrace();
}
}
答案 3 :(得分:5)
我找到了一种将应用程序带到前台的新方法, 它模仿单击图标以启动应用程序。
PackageManager packageManager = context.getPackageManager();
Intent intent = packageManager.getLaunchIntentForPackage(pkName);
if (intent != null)
{
//模拟点击桌面图标的启动参数
intent.setPackage(null);
// intent.setSourceBounds(new Rect(804,378, 1068, 657));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
context.startActivity(intent);
}
它对我有用,但谁可以告诉我为什么包必须为空
答案 4 :(得分:0)
要发出警报,您需要查看启动Android Service
此服务将比您的应用程序更具弹性,这些应用程序可能会在后台被杀死,并且可以触发intent将应用程序置于最前面(或者当它被杀死时重新启动它)警报响起。
答案 5 :(得分:0)
使用ActivityManager类,您可以将正在运行的任务放在最前面
void bringToFront(){
ActivityManager activtyManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> runningTaskInfos = activtyManager.getRunningTasks(3);
for (ActivityManager.RunningTaskInfo runningTaskInfo : runningTaskInfos)
{
if (this.getPackageName().equals(runningTaskInfo.topActivity.getPackageName()))
{
activtyManager.moveTaskToFront(runningTaskInfo.id, ActivityManager.MOVE_TASK_WITH_HOME);
return;
}
}
}