【问题标题】:How to open a particular message/conversation in the Gmail app如何在 Gmail 应用程序中打开特定消息/对话
【发布时间】:2018-10-11 20:04:03
【问题描述】:

我正在尝试以编程方式在 Android 上的 Gmail 应用中打开一封单独的电子邮件。

我知道这是可以做到的,因为当您点击内置通知时,它们会向您发送一条消息,并且市场上有一个名为 Gmail Notifier 的应用程序也可以做到这一点。

到目前为止我已经尝试过:

-发送带有消息 URI 作为数据的 ACTION_VIEW 意图(失败 - 无法解析 URI)

-发送意图打开Gmail包中的HtmlConversationActivity(失败-“需要权限:null”)

在意图中添加标志或类别会有所帮助吗?如果有,是哪一个?

我知道 Gmail 应用程序的文档不完善,但它让我很生气,肯定有办法做到这一点,我就是想不通!

P.S.:这是我第一次在 stackoverflow 上发帖,所以如果我忽略了任何约定,我提前道歉。

【问题讨论】:

    标签: android


    【解决方案1】:

    这可能是可能的,但谷歌已经确定这是不可能的。 我花了几个小时试图让它工作:

    1. 从我的 root 手机中提取了 Gmail.apk。
    2. 使用 apktools 反编译。
    3. 检查 manifest.xml

    2 活动似乎对它有用:

    activity android:theme="@android:style/Theme.Light.NoTitleBar" 
             android:label="@string/activity_conversation" 
             android:name="HtmlConversationActivity" 
             android:configChanges="keyboardHidden|orientation"
    

    activity android:label="@string/activity_search" android:name="SearchActivity" 
    

    它们都没有意图过滤器,因此您无法调用它们。 如果你尝试你会得到

    权限拒绝:从 ProcessRecord{40b7d248 26043:co.il.gmailresearch/10154}(pid =26043, uid=10154) 要求为空

    也许可以使用 com.google.android.gm.ConversationListActivity。 但是代码必须被混淆,我没有费心去获取 Gmail.apk 的源代码来验证他们使用了哪些标志......

    编辑: 好吧,好吧,我确实费心检查它,令人惊讶的是,谷歌并没有混淆他们的 Gmail 应用程序 :) 所以我能够得到APK的源代码。 做了一些挖掘,这就是我发现的......

    相关的Activity是ConverstaionListActivity。

    在 Manifest.xml 中有这个意图过滤器:

    action android:name="android.intent.action.SEARCH"/>

    当我检查活动的代码时,我发现有 3 个预期的字符串可以作为额外的:

    public static final String EXTRA_LABEL = "label";
    public static final String EXTRA_SEARCH = "search";
    public static final String EXTRA_TITLE = "title";
    

    无论如何。按钮行,您无法打开特定对话。但是您可以传递一个搜索查询,该查询将仅显示用户拥有的所有邮件中的特定对话。

    Intent mailClient = new Intent(Intent.ACTION_SEARCH);
    mailClient.setClassName("com.google.android.gm", "com.google.android.gm.ConversationListActivity");
    mailClient.putExtra("query", "15 Apps for Programming");                
    startActivity(mailClient);
    

    【讨论】:

    • 这似乎不再起作用了。我刚试过。有人在这方面取得过成功吗?
    【解决方案2】:

    我正在尝试以编程方式在 Android 上的 Gmail 应用中打开一封单独的电子邮件。

    没有记录和支持的 Intents 用于使用 Gmail 应用程序。开发人员不应该与此应用程序紧密集成——如果 Google 想要这种集成,他们会记录并支持这种集成,就像他们对联系人所做的那样。

    【讨论】:

    • 我知道你会这么说,但如果我想让一家公司告诉我可以做什么,我会为 iPhone 开发应用程序!我的观点是它可以做到,知道如何做会很棒。我愿意承担有一天我的应用程序将停止运行并且我从该特定应用程序中获得的收入将降至零(我销售的应用程序不止一个)的风险。
    • 嘿@Co​​mmonsWare,我知道这是一个非常古老的线程,但是现在有没有打开特定消息的意图。
    • @NiteshSingh:由于我不知道您的应用程序如何为特定电子邮件提供标识符,因此我无法回答。
    • @CommonsWare ,我有消息 ID 和线程 ID,我使用 Gmail API 获取了这个。
    • @NiteshSingh:联系 Google 并询问他们是否有记录和支持的 <intent-filter> 可以使用该信息。我不使用 Gmail,也不将应用程序连接到 Gmail。
    猜你喜欢
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 2012-02-11
    • 1970-01-01
    • 2017-06-17
    相关资源
    最近更新 更多