jpush-flutter-plugin icon indicating copy to clipboard operation
jpush-flutter-plugin copied to clipboard

在android端使用flutter插件,app在后台收到推送消息,点击通知栏不能回到前台

Open navyzhou926 opened this issue 5 years ago • 12 comments

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、请极光推送的朋友们看看这个严重的问题,不然真的没法用

navyzhou926 avatar May 07 '20 01:05 navyzhou926

修改JPushPlugin.java文件里的handlingNotificationOpen这个方法:

navyzhou926 avatar May 07 '20 06:05 navyzhou926

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); }

navyzhou926 avatar May 07 '20 06:05 navyzhou926

改为

navyzhou926 avatar May 07 '20 06:05 navyzhou926

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; } }

navyzhou926 avatar May 07 '20 06:05 navyzhou926

导出头文件 import android.app.ActivityManager; import android.content.ComponentName; import java.util.List;

navyzhou926 avatar May 07 '20 06:05 navyzhou926

现在每次在后台收到通知后,点击通知消息都能回到app前台了

navyzhou926 avatar May 07 '20 06:05 navyzhou926

还有记得在你的flutter工程里的android目录里的AndroidManifest.xml文件添加权限

navyzhou926 avatar May 07 '20 06:05 navyzhou926

<uses-permission android:name="android.permission.REORDER_TASKS" />

navyzhou926 avatar May 07 '20 06:05 navyzhou926

你好我的安卓在前台可以收到推送,在后台收不到推送,需要设置什么吗?

peak77 avatar Jun 19 '20 11:06 peak77

@navyzhou926 你是什么机型? 我这边测试点击通知都可以正常打开APP

raoxudong avatar Sep 18 '20 09:09 raoxudong

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应用,引用本地的源码插件。

运行,搞定。应用到后台,点击通知栏打开前台。

tangwei5476 avatar Dec 31 '24 08:12 tangwei5476

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进入方法。

tangwei5476 avatar Dec 31 '24 08:12 tangwei5476