如何在Gmail应用中打开特定的消息/对话

时间:2010-08-28 22:30:51

标签: android

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

我知道可以这样做,因为内置的通知会在您点击它们时向您发送消息,并且市场上有一个名为Gmail通知程序的应用程序也可以执行此操作。

到目前为止我尝试过:

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

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

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

我知道Gmail应用程序没有详细记录,但它让我很生气,确实有一种方法可以做到这一点,我无法理解它!

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

2 个答案:

答案 0 :(得分:8)

这可能是可能的,但谷歌确保这是不可能的。 我花了几个小时试图让它发挥作用:

  1. 从我的root电话中拉出Gmail.apk。
  2. 使用apktools对其进行反编译。
  3. 浏览manifest.xml
  4. 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}启动Intent {act = android.intent.action.VIEW flg = 0x10000000 cmp = com.google.android.gm / .HtmlConversationActivity}(pid = 26043,uid = 10154)需要null

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

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

    相关活动是ConverstaionListActivity。

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

      

    动作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);
    

答案 1 :(得分:1)

  

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

使用Gmail应用程序时没有记录和支持的Intents。开发人员不应该与这个应用程序紧密集成 - 如果谷歌想要这样的集成,他们就会记录并支持这种集成,就像他们对联系人一样。