单击通知即可转到当前活动

2024-01-07

我正在使用这个解决方案:如何使通知意图恢复而不是制定新意图? https://stackoverflow.com/questions/3305088/how-to-make-notification-intent-resume-rather-than-making-a-new-intent

当我正常运行我的应用程序时,我工作得很好。但是我的应用程序有共享功能。

当我选择要从图库应用程序共享的图像并在我的活动中打开它时,我会在活动中创建一条通知。我希望当用户单击通知时它会打开现有活动(由图库应用程序打开)

问题是,当我单击通知时,它不会恢复该活动,而是打开该活动的新实例或之前已打开的另一个实例

编辑: 更多解释

我的应用程序称为 ShareApp,活动称为 ShareActivity 问题是,当我通过图库应用程序打开 ShareActivity 时,会在图库应用程序任务堆栈的顶部创建 ShareActivity 的实例。现在,当我创建指向我的 ShareActivity 的通知时,我使用以下意图:

Intent intent = new Intent(this, ShareActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

问题是,当我单击通知时,它指向 ShareApp 任务堆栈中的 ShareActivity 实例,而不是图库应用程序任务堆栈中。

知道如何指向正确的任务堆栈吗?

编辑2:我的代码

        int defaults = Notification.FLAG_NO_CLEAR;
        NotificationCompat.Builder mBuilder =
                    new NotificationCompat.Builder(this)
                    .setSmallIcon(R.drawable.ic_launcher)
                    .setContentTitle(getString(R.string.app_name))
                        .setContentText(text)
                        .setDefaults(defaults);
        Intent intent = new Intent(this, this.getClass());
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

        mBuilder.setContentIntent(pendingIntent);
        NotificationManager mNotificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(_ID, mBuilder.build());

编辑3:adb shell dumpsys活动(应用David的代码后https://stackoverflow.com/a/16901603/1334268 https://stackoverflow.com/a/16901603/1334268)

我的应用程序称为 shareApp,我的活动是 ShareActivity

在点击通知之前:

Main stack:
    TaskRecord{41965708 #6 A com.android.gallery3d}
    Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.gallery3d/.app.Gallery bnds=[364,50][108,108]}
      Hist #2: ActivityRecord{417ccc28 com.yeahman.shareapp/.ShareActivity}
        Intent { act=android.intent.action.SEND_MULTIPLE typ=image/* cmp=com.yeahman.shareapp/.ShareActivity (has extras) }
        ProcessRecord{41c868d0 6088:com.yeahman.shareapp/10116}
      Hist #1: ActivityRecord{4135e540 com.android.gallery3d/.app.Gallery}
        Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.gallery3d/.app.Gallery bnds=[364,50][108,108] }

点击通知后:

 Main stack:
    TaskRecord{41965708 #6 A com.android.gallery3d}
    Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.gallery3d/.app.Gallery bnds=[364,50][108,108]}
      Hist #3: ActivityRecord{4169f358 com.android.gallery3d/.app.Gallery}
        Intent { flg=0x20000000 cmp=com.android.gallery3d/.app.Gallery bnds=[0,205][480,301] }
        ProcessRecord{4175dd28 5808:com.android.gallery3d/10036}
      Hist #2: ActivityRecord{417ccc28 com.yeahman.shareapp/.ShareActivity}
        Intent { act=android.intent.action.SEND_MULTIPLE typ=image/* cmp=com.yeahman.shareapp/.ShareActivity (has extras) }
        ProcessRecord{41c868d0 6088:com.yeahman.shareapp/10116}
      Hist #1: ActivityRecord{4135e540 com.android.gallery3d/.app.Gallery}
        Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.gallery3d/.app.Gallery bnds=[364,50][108,108] }

    Notification.Builder mBuilder =
            new Notification.Builder(this)
            .setSmallIcon(R.drawable.cmplayer)
            .setContentTitle("CoderoMusicPlayer")
            .setContentText("PLayer0!");

    Intent resultIntent = new Intent(this, AndroidBuildingMusicPlayerActivity.class);
    resultIntent.setAction(Intent.ACTION_MAIN);
    resultIntent.addCategory(Intent.CATEGORY_LAUNCHER);

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
            resultIntent, 0);

    mBuilder.setContentIntent(pendingIntent);
    NotificationManager mNotificationManager =
        (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    mNotificationManager.notify(1, mBuilder.build());

只需复制代码并将其粘贴到您的主启动器活动中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单击通知即可转到当前活动 的相关文章

随机推荐

  • C#:: 何时使用事件或从事件处理接口派生的对象集合?

    我有一个我认为是一个简单的 问题 我已经找到了几个解决方案 但我不确定该走哪条路以及 C 中的最佳实践 我有一个主对象 比如单例 在应用程序的生命周期内实例化一次 这个 MasterClass 创建了一堆新类型的对象 每次调用 Master
  • 创建带有前导零的数字序列[重复]

    这个问题在这里已经有答案了 这个问题之前已经使用 Console writelines 函数解决过 但这在我的 R 版本中不可用 而且我找不到它属于哪个包 我只是想以 xxx 格式创建一个从 0 99 到前导零的数字序列 所以我的数字应该是
  • 如何将 MongoDB 对象提取到 pandas Dataframe?

    我想从 MongoDB 集合中仅提取一个我需要的对象 有一个关于 manuelActivityInfo 对象的示例 x list coll find activities manuelActivityInfo exists True act
  • maxRequestPathLength 不在 ASP.NET 4 文档中并且不起作用

    如果我尝试在 ASP NET 应用程序中使用新的 maxRequestPathLength 设置 它将不起作用 我收到无法识别的属性错误 我尝试过在 IIS 7 中使用 ASP NET Integrated 和 Classic 应用程序池
  • 服务器端的客户端证书验证,DEPTH_ZERO_SELF_SIGNED_CERT 错误

    我正在使用节点 0 10 26 并尝试通过客户端验证建立 https 连接 服务器的代码 var https require https var fs require fs process env NODE TLS REJECT UNAUT
  • R闪亮:彩色文件输入按钮和进度条

    有没有办法上色fileInputR 中的按钮闪亮吗 看起来这是可能的 如此处所示page https github com rstudio shiny pull 602在 github 上 但是我找不到完成此操作的代码 这是一个简单的应用程
  • 尝试在新解决方案中启用 NuGet Package Restore 时出错

    尝试在我刚刚创建的新解决方案中启用包还原时出现错误 VS2012中的错误是 NuGet 包管理器 配置解决方案以还原 NuGet 时出错 构建中的包 无法从路径 NuGet Build 2 7 0 npkg 读取包 我尝试在 VS2010
  • 从日期/时间字符串获取时间

    我有一个日期值存储在变量中 我需要将值的时间部分提取到一个单独的变量中 然后从中添加 减去时间 日期变量使用 date YmdHis 设置 例如 20110805124000 表示 2011 年 8 月 5 日 12 40 00 从值 20
  • PInvoke - 从指针编组结构数组

    我正在尝试遵循以下答案这个问题 https stackoverflow com a 2403083 27494 我的结构在 C 中看起来像这样 typedef struct drive info t unsigned char drive
  • 将 Apache Cordova/PhoneGap 与 Android 2.x 结合使用

    似乎不可能为 Android 2 x 创建 PhoneGap 应用程序 是对的吗 要使用phonegap运行Android应用程序 请将您的应用程序构建为Android 4 0 3 并将最低版本设置为您想要的较低版本 基本上 Android
  • cPanel cron 作业,未指定输入文件?

    我刚刚设置了我的第一个 cron jon 来每晚运行一个股票脚本 手动运行它效果很好 它存储在 admin stock update php中 我正在运行的命令是 usr bin php q admin stock update php 但
  • 如何对类的单个枚举进行 Javadoc

    我正在为一个包含自己的枚举的类编写 Javadoc 有没有办法为各个枚举生成 Javadoc 例如 现在我有这样的事情 This documents HairColor private static enum HairColor BLACK
  • 从方法返回泛型类型的实例

    我想要一个方法getInstance它接受一个字符串值并返回一个对象实例 在方法签名中定义为泛型 def getInstance T dataStr String Option T T match case typeOf String gt
  • Avro 模式中的多态性和继承

    是否可以编写一个 Avro 模式 IDL 来生成一个扩展基类或实现接口的 Java 类 生成的 Java 类似乎扩展了org apache avro specific SpecificRecordBase 因此 工具可能是一条出路 但是 我
  • 由矩形组成的形状最少有多少个矩形?

    我不确定是否有算法可以解决这个问题 将给定数量的矩形从左到右水平并排放置以形成一个形状 您将获得每个的宽度和高度 您如何确定覆盖整个形状所需的最小矩形数量 即 您将如何使用尽可能少的矩形重新绘制该形状 我只能考虑尝试挤压尽可能多的大矩形 但
  • 有没有办法区分 iPhone 3G/S 访问者和 iPhone 4 访问者?

    我想为 iPhone 4 用户加载更高分辨率的图片 但我知道检测用户的唯一方法是通过用户代理 但我的印象是任何 iOS4 手机上的 MobileSafari 用户代理都是一样的 我该怎么做才能检测到 iPhone 4 您可以使用 CSS3
  • 如何使用 java 和 xmlunit 比较具有相同命名空间但不同前缀的两个 xml

    我有 2 个 xml 文件 问题出在属性前缀中
  • 水平 ListView Xamarin.Forms

    有什么办法可以创建ListView with horizontal scroll in Xamarin Forms喜欢图像 这就是我为垂直所做的 var myListView new ListView ItemTemplate new Da
  • 在同一端口上运行两个 Web 应用程序?

    我们有两个不同的 Java Web 应用程序 名为 foo war 和 bar war 我们希望将它们部署在 Jetty 服务器上 Jetty 正在机器上的 8080 端口上运行 是否可以在同一端口上同时运行两个应用程序 如果没有 在同一码
  • 单击通知即可转到当前活动

    我正在使用这个解决方案 如何使通知意图恢复而不是制定新意图 https stackoverflow com questions 3305088 how to make notification intent resume rather th