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

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

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

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

-发送 Intent 以在Gmail软件包中打开HtmlConversationActivity(失败-“需要权限:空”)

向目标添加标志或类别是否有帮助?如果是这样,哪一个?

我知道Gmail应用程序的文档记录不充分,但是它让我发疯了,因为肯定有一种方法可以做到这一点,而我只是想不通!

附注:这是我第一次在stackoverflow上发帖,因此如果我忽略了任何约定,我事先表示歉意。

最佳答案

有可能,但谷歌已确保这将是不可能的。
我花了几个小时试图使其工作:

  • 从我的根电话中拉出了Gmail.apk。
  • 使用apktools对其进行反编译。
  • 遍历manifest.xml

  • 2 Activity 似乎对此很有用:
    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"
    

    它们都没有 Intent 过滤器,因此您不能调用它们。
    如果尝试,您会得到



    可能可以使用com.google.android.gm.ConversationListActivity。
    但是必须对代码进行混淆,并且我不必费心去获取Gmail.apk的源代码来验证它们使用了哪些标志...

    编辑:
    好吧,我很乐意检查它,而且令人惊讶的是Google并没有混淆他们的Gmail应用程序:)
    这样我就能获得APK的源代码。
    做了一些挖掘,这就是我发现的...

    相关的 Activity 是ConverstaionListActivity。

    在Manifest.xml中,它具有以下 Intent 过滤器:



    当我检查该 Activity 的代码时,我发现有3个期望的字符串可以作为额外的字符串:
    public static final String EXTRA_LABEL = "label";
    public static final String EXTRA_SEARCH = "search";
    public static final String EXTRA_TITLE = "title";
    

    无论如何。按钮行,则无法打开特定的对话。但是您可以通过搜索查询,该查询仅显示用户所有邮件中的特定 session 。
    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);
    

    关于android - 如何在Gmail应用程序中打开特定的邮件/ session ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3592745/

    10-17 00:14