FLAG_ACTIVITY_REORDER_TO_FRONT无法在某些设备上运行

时间:2017-06-08 13:22:50

标签: android

所以这就是我想在这里实现的......我们在设备上安装了两个安卓APK ...每个APK都可以强制自己在前台(这不是一般公众会使用的应用程序没关系......)

  • 因此我们使用活动a启动任务a。
  • 然后我们使用活动b启动任务b。
  • 然后活动a&任务a想要前往(这可能随时发生)
  • 稍后,活动a和任务a想要前往

因此我们使用以下代码使用此代码:

Intent i = new Intent(Variables.context, HomeActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);

大!

但是,在运行4.2.2(也可能是其他人)的手机上,我们注意到行为不符合预期。可能会发生以下两件事。

让我们假设活动a&任务a在前台,但是想要使活动b和任务b到达前台它不起作用。

但是,如果没有任务在前台并且主启动器被聚焦,则活动b和任务b按预期弹出到前台。

以下是其中一个应用程序中的一个清单示例:

 <activity
            android:name="some.app.id.goes.here"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="adjustPan">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

我尝试添加以下代码:

android:launchMode="singleTop"

它仍然不起作用。

我有什么遗失的吗?

一些注意事项:

  • 活动A可以是任何应用程序,而不仅仅是我们开发的应用程序,它排除了活动A阻止这种情况发生。我们使用Google Chrome / Google地图/ Google Play商店获得了相同的结果。
  • 我们不会覆盖onNewIntent

1 个答案:

答案 0 :(得分:0)

嗯,这是多么痛苦......

这是我必须做的解决方法......

private void generateNotificationToPopActivityToTop(final int id, Context context, String message) {
        Intent notificationIntent = new Intent(context, HomeActivity.class);
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0);

        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
                .setSmallIcon(R.drawable.ic_launcher)
                .setContentTitle(context.getString(R.string.app_name))
                .setFullScreenIntent(intent, true)
                .setPriority(NotificationCompat.PRIORITY_MAX)
                .setContentText(message)
                .setAutoCancel(true)
                .setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE | Notification.DEFAULT_LIGHTS);
        final NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(id, mBuilder.build());

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                mNotificationManager.cancel(id);
            }
        }, 1000);

    }