【问题标题】:Extract Notification Pending Intent Content for Accessibility提取通知待定意图内容以实现可访问性
【发布时间】:2013-05-04 12:37:09
【问题描述】:

我正在为我的 Android 应用程序开发辅助功能,其中之一是向用户宣布他们的通知。

使用以下标准代码,我可以访问通知信息:

@Override
public void onAccessibilityEvent(final AccessibilityEvent event) {

        final Notification not = (Notification) event.getParcelableData();
        final CharSequence tick = not.tickerText;
        final PendingIntent pi = not.contentIntent;

但在这里我被困在如何从 PendingIntent 中提取信息以建立例如它指向的 Activity(如果有的话)。

我可以使用以下标准代码来确定发起者:

final String packageName = event.getPackageName().toString()

在大多数情况下这很好,但许多通知来自 Google 服务框架或 Android 系统,因此PendingIntent 信息将提供有关它们到底是什么的进一步线索 - 一个很好的例子就是 GTalk,它是在 Google Services Framework 的通用包名下。

我已经阅读了很多related posts,包括如何访问action the Pending Intent,但我不知道如何才能访问这些信息,或者如果可能的话。

pi.getCreatorPackage();
pi.getTargetPackage();

两者都返回 Google 服务框架(在 GTalk 的情况下)

pi.readPendingIntentOrNullFromParcel(?);

看起来更有希望,但我不确定如何处理它。

我希望你能帮忙,或者告诉我这是不可能的!提前谢谢你。

【问题讨论】:

    标签: android android-intent accessibility android-pendingintent


    【解决方案1】:

    很遗憾,这是不可能的。 PendingIntent 的内容由 ActivityManager 管理,并且没有可用的 API 可用于从 ActivityManager 获取此数据。

    【讨论】:

    • 感谢您的回复。看来你是对的,因为我什么也找不到。希望我再给它几天,然后将您的答案标记为正确。你知道我能从反射中得到什么吗?
    • 不幸的是,没有。我试过这个。我挖掘了PendingIntentActivityManagerActivityManagerNative 的源代码,看起来没有包含与Intent 关联的实际数据的方法(甚至是私有方法)或字段。这些数据都保存在ActivityManagerService 中,似乎没有任何可调用的方法来访问这些数据。对不起。
    • 这是一种耻辱。 PendingIntent 提供了一种很好的方法来安全地为应用程序在内存中保存一些状态(因为它会在应用程序被杀死后继续存在),但在某些情况下改变该状态是有问题的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    相关资源
    最近更新 更多