Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在Gmail应用程序中打开特定消息/对话_Android - Fatal编程技术网

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

Android 如何在Gmail应用程序中打开特定消息/对话,android,Android,我试图在Android上的Gmail应用程序中以编程方式打开一封单独的电子邮件 我知道这是可以做到的,因为当你点击内置的通知时,它会向你发送一条消息,而市场上有一款叫做Gmail Notifier的应用程序也能做到这一点 到目前为止,我所尝试的: -以消息URI作为数据发送操作\视图意图(失败-无法解析URI) -发送在Gmail包中打开HtmlConversationActivity的意图(失败-“需要权限:null”) 在意向中添加标志或类别是否有帮助?如果有,哪一个 我知道Gmail应用程

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

我知道这是可以做到的,因为当你点击内置的通知时,它会向你发送一条消息,而市场上有一款叫做Gmail Notifier的应用程序也能做到这一点

到目前为止,我所尝试的:

-以消息URI作为数据发送操作\视图意图(失败-无法解析URI)

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

在意向中添加标志或类别是否有帮助?如果有,哪一个

我知道Gmail应用程序并没有很好的文档记录,但它让我抓狂,因为肯定有办法做到这一点,我就是想不出来

这是我第一次在stackoverflow上发帖,所以如果我忽略了任何惯例,我会提前道歉

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


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

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

  • 从我的手机中取出Gmail.apk
  • 使用apktools反编译它
  • 检查manifest.xml
  • 2项活动似乎对it有用:

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

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

    权限拒绝:从ProcessRecord{40b7d248 26043:co.il.gmailresearch/10154}(pid=26043,uid=10154)启动Intent{act=android.Intent.action.VIEW flg=0x10000000 cmp=com.google.android.gm/.HtmlConversationActivity}需要空值

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

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

    相关的活动是对话性活动

    在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);
    

    我知道你会这么说,但如果我想让一家公司告诉我我可以做什么,我会为iPhone制作应用程序!我的观点是,这是可以做到的,知道怎么做会很好。我愿意接受这样的风险:有一天我的应用程序将停止工作,我从该应用程序中获得的收入将降至零(我正在销售多个应用程序)。嘿@commonware,我知道这是一条非常古老的线索,但是,是否每天都有打开特定邮件的意图。@尼特辛:因为我不知道你的应用程序如何具有特定电子邮件的标识符,所以我无法回答。@Commonware,我有邮件Id和线程Id,我是用Gmail API获取的。@NiteshSingh:联系谷歌,询问他们是否有一个文档化的、受支持的
    可以处理这些信息。我不使用Gmail,也不将应用程序连接到Gmail。这似乎不再有效。我刚试过。有人在这方面取得过成功吗?
    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);