Gmail Api 的解读及例子

  由于公司需求需要获取Gmail的信息,于是下了Google提供的例子并开始研究GoogleApi的调用,在这个过程中遇到了几个坑同时也学习到了一些知识,现记录如下:
      一 Android QuickStart
        https://developers.google.com/gmail/api/quickstart/android   (链接)
        google 给出了一个对于Andriod 的快速开始的例子,没有现成的源码,但是文章比较详细的介绍了要想在Android上使用gmailApi,需要做的步骤。像任何第三方提供接口一样,你需要相关授权并在其网站上建立该应用(博主也使用过新浪提供的api ,那个坑真是泪泪的。。)。
        step1 中需要Android 的sha1 的签名证书,keytool是jdk的工具,要将其路径加入环境变量中,对我坑的是,文档上 debug.keystore 的地址,由于我的jdk 是安装再d盘的,所以 文档上的 ~ 代表的是D盘,而debug.keystore 是存在在你C 盘下的,所以各种找不到,最后突然顿悟Linux下的命令的相对地址,才发现了这个坑,得到了sha1的签名证书。
         
Linux路径,对相对路径要敏感!
         
        接下来按照步骤来进行,顺利在AS上建立了工程,不过下载相关的依赖也是费了好大劲,结果jar 包下下来之后,开始run,出现错误:
        com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_45\bin\java.exe'' finished with non-zero exit value 2

        上网各种找解决方法,http://stackoverflow.com/questions/30001051/appdexdebug-execexception-finished-with-non-zero-exit-value-2   stackoverflow上的这个解释地很好。就是jar 包的问题。
      用网上的方法去逐个删除jar 包排除这种重复,但是最恐怖的事情发生了,当删除一个jar包的时候重复错误没有了,但是同时代码里的不识别也出来了,这说明一个jar包里面的是一半需要一半不需要! 仔细的比对了文档提供的build.gradle 文件,想到在建立 build.gradle 文件的时候,直接生成的默认的 compileSdkVersion和 targetSdkVersion  等 是 23 ,而例子提供的是22,导致下面 dependencies中 compile 的 包名里面  appcompat-v7:23.0.0 ,和文档给出的不符合,然后添加dependencies 中的其他 依赖,一般都用高版本的,所以想可能是这个原因,将所有数字改成和文档提供的一样,然后,然后。。。就build成功了。。。。
      
 版本的问题有时候很重要,这是对所有开发的坑,特别是jar包,sdk的版本等,时刻拥抱变化。。。

     二 具体API
     quickstart 只是给出了获得当前gmail账户所有标签的例子,谁想要标签啊,当然都是要未读邮件的数目啦,开始理解Gmail的数据结构,下面进行简单的介绍,并不详尽,因为没有太多时间去一一理解:
     Gmail提供了三种数据结构:Threads,Messages,Labels。Threads 在我理解是会话的一次,是指你和另外的一个账户进行会话的过程,而每一个Threads 是可以有多个Messages的,所以Messages就很好理解,就是指一条信息,通过查看它的属性和操作,你可以知道当获得了这个对象之后你可以获得的相关信息和进行的操作;而labels就是你邮箱中定义的标签,从给出的quicstart也可以看出,最后打印出来的有INBOX,SPAM,SENT等各种类型,可以从这个链接上查看https://developers.google.com/gmail/api/guides/labels,更开心的是,看到了User.lables是具有messagesTotal,messagesUnread,threadsTotal,threadsUnread 的属性,那么获得你想要的标签下的对象,然后输出这个属性不就好了,我们想要未读邮箱的数目,那么就是INBOX里面的threadsUnread的属性嘛,很开心的在QuickStart 的程序中对获得的lables进行遍历, 搜集INBOX标签的对象,结果打印的结果是null,试了各种标签的数目都是null,百思不得其解,这个时候一定要再去看google文档,又耐心的找了一遍,发现在具体的介绍操作(get,list,modify,delete等)的页面上有代码段子,并且提供了页面操作,然后发现了获取label的方法有猫腻,QuickStart上仅仅是mActivity.mService.users().labels.list(user).execute(),  只是获得了label的list,而实际上是这样子的:
MActivity.mService.users().labels.get(user,"INBOX").execute() ,这样获得的label对象才能够获得到threadsUnread的数值,果然还是做得看得少了。
       同时还要注意的是,对Gmail邮箱不同类型的操作是需要不同的权限的,只是获得labellist,权限少,但是要获得数目或者是要对具体信息更改创建的时候需要更多的权限,以QuickStart为例,其权限设置在SCOPES一个字符串数组里,你可以向其中添加GmailScopes.GMAIL_LABELS,GmailScope.MAIL_GOOGLE_COM等权限。
   
      三 Android知识  
        在复制QuickStart代码的过程中,学习了一下google技术人员的写法,可能只有两个文件,不能显示出google技术人员的水平,一个mainactivity ,动态写的布局,没有用layout的xml文件,使用了AsynTask来做异步操作,但是惊奇的是在doInbackgroud中进行了UI的操作,但是人家这个UI操作是封装在acitivty中runOnUIThread里面的,看得我也是愣神一愣神的,想必自己经历的还是太少,对于runOnUIThread这个函数,网上有其和handler的使用场景比较,但实际上runOnUiThread的源码即使用了handler 的callbacks 进行完成的,只不过用runOnUithread应该代码量更少而已,所以可能到底用哪个全看喜好了,但关键还是要理解其内部的原理,才能随心所欲。

       记录动态生成布局的例子,有利于理解Android的View其绘制原理:

        LinearLayout activityLayout = new LinearLayout(this);
       
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
               
LinearLayout.LayoutParams.MATCH_PARENT,
               
LinearLayout.LayoutParams.MATCH_PARENT);
        activityLayout
.setLayoutParams(lp);
        activityLayout
.setOrientation(LinearLayout.VERTICAL);
        activityLayout
.setPadding(16, 16, 16, 16);

       
ViewGroup.LayoutParams tlp = new ViewGroup.LayoutParams(
               
ViewGroup.LayoutParams.WRAP_CONTENT,
               
ViewGroup.LayoutParams.WRAP_CONTENT);

        mOutputText
= new TextView(this);
        mOutputText
.setLayoutParams(tlp);
        mOutputText
.setPadding(16, 16, 16, 16);
        mOutputText
.setVerticalScrollBarEnabled(true);
        mOutputText
.setMovementMethod(new ScrollingMovementMethod());
        activityLayout
.addView(mOutputText);

下面给出了自己写的quickstart的源代码,是成型的工程,输出结果为全部邮箱数目和未读邮箱数目,同时加入了一分钟刷新页面的机制<使用的是handler>
PS: Gmal Api部分还有推送部分,还没有时间详细的去了解,想必这个推送对一些app有价值,可以后续有时间了再研究。
下载链接:http://download.csdn.net/detail/elfxwt/9178015
github地址:    https://github.com/elfxwt/GmailQuickStart/tree/master   

你可能感兴趣的:(Android)