在android端使用flutter插件,app在后台收到推送消息,点击通知栏不能回到前台
1、一般收到5次推送消息,点击5次通知栏才回到前台一次,这样体验太不好了。 2、点击通知栏消息能回到前台就会打印下面的,点击不回到前台就不会打印 D/JIGUANG-JCore-P(31065): [JCoreHelper] runActionWithService action:change_foreground D/JIGUANG-JCore-P(31065): [JCoreHelper] runActionWithService action:notification_state E/VpsExtension(31065): Failed to get binder for service "vendor.vpsservice" E/VpsExtension(31065): Failed to get binder for service "vendor.vpsservice" 3、请极光推送的朋友们看看这个严重的问题,不然真的没法用
修改JPushPlugin.java文件里的handlingNotificationOpen这个方法:
将
Intent launch = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()); if (launch != null) { launch.addCategory(Intent.CATEGORY_LAUNCHER); launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); context.startActivity(launch); }
改为
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> taskList = activityManager.getRunningTasks(100); // 获得当前运行的task String packageName = context.getPackageName(); for (ActivityManager.RunningTaskInfo taskInfo : taskList) { // 找到当前应用的task,并启动task的栈顶activity,达到程序切换到前台 if (taskInfo.topActivity.getPackageName().equals(packageName)) { activityManager.moveTaskToFront(taskInfo.id, 0); break; } }
导出头文件 import android.app.ActivityManager; import android.content.ComponentName; import java.util.List;
现在每次在后台收到通知后,点击通知消息都能回到app前台了
还有记得在你的flutter工程里的android目录里的AndroidManifest.xml文件添加权限
<uses-permission android:name="android.permission.REORDER_TASKS" />
你好我的安卓在前台可以收到推送,在后台收不到推送,需要设置什么吗?
@navyzhou926 你是什么机型? 我这边测试点击通知都可以正常打开APP
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> taskList = activityManager.getRunningTasks(100); // 获得当前运行的task String packageName = context.getPackageName(); for (ActivityManager.RunningTaskInfo taskInfo : taskList) { // 找到当前应用的task,并启动task的栈顶activity,达到程序切换到前台 if (taskInfo.topActivity.getPackageName().equals(packageName)) { activityManager.moveTaskToFront(taskInfo.id, 0); break; } }
2024年12月31日,经测试。这个方法可以再应用后台时,点击通知栏唤起应用到前台。 步骤1:不要通过flutter插件引用,将源码下载到本地。(本人下载的插件版本是 dev-3.x的源码) 步骤2:找到本地下载的源码中,点击通知后的回调方法。JPushHelper类中transmitNotificationOpen方法。将以上代码放进方法if (dartIsReady) { 中。 步骤3:flutter应用,引用本地的源码插件。
运行,搞定。应用到后台,点击通知栏打开前台。
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> taskList = activityManager.getRunningTasks(100); // 获得当前运行的task String packageName = context.getPackageName(); for (ActivityManager.RunningTaskInfo taskInfo : taskList) { // 找到当前应用的task,并启动task的栈顶activity,达到程序切换到前台 if (taskInfo.topActivity.getPackageName().equals(packageName)) { activityManager.moveTaskToFront(taskInfo.id, 0); break; } }
2024年12月31日,经测试。这个方法可以再应用后台时,点击通知栏唤起应用到前台。 步骤1:不要通过flutter插件引用,将源码下载到本地。(本人下载的插件版本是 dev-3.x的源码) 步骤2:找到本地下载的源码中,点击通知后的回调方法。JPushHelper类中transmitNotificationOpen方法。将以上代码放进方法if (dartIsReady) { 中。 步骤3:flutter应用,引用本地的源码插件。
运行,搞定。应用到后台,点击通知栏打开前台。
补充下:里面有个context,需要查看transmitNotificationOpen方法引用的地方,修改transmitNotificationOpen方法参数,从引用的地方传context进入方法。