作者:emneg-zeerd

首发:http://www.itfunz.com/thread-19343-1-1.html

一如既往的无图无真相!

我们都知道,Android自带的GMail和EMail都非常蛋疼的不支持附件存储。这就导致很多问题,比如apk无法安装……

下面,简单介绍一下GMail/EMail附件读取存储的准备知识。

既然目标已经明确了,那么首先要做的事情就是在我们点击GMail/EMail的打开附件按钮时,需要相应我们自己编写的应用程序。
这里大概用到了一些filter的知识,我的另一篇文章《android文件关联的实现以及参数获取》中曾经简单的提过,有幸去看一看看。
这里还是直接给出xml文件:

[xhtml] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.pickattach"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <application android:icon="@drawable/icon" android:label="@string/app_name">
  7. <activity android:name=".MainActivity"
  8. android:label="@string/app_name">
  9. <intent-filter>
  10. <action android:name="android.intent.action.MAIN" />
  11. <category android:name="android.intent.category.LAUNCHER" />
  12. </intent-filter>
  13. <intent-filter>
  14. <action android:name="android.intent.action.VIEW"></action>
  15. <category android:name="android.intent.category.DEFAULT"></category>
  16. <category android:name="android.intent.category.BROWSABLE"></category>
  17. <data android:scheme="content" android:host="gmail-ls" android:mimeType="*/*"></data>
  18. </intent-filter>
  19. <intent-filter>
  20. <action android:name="android.intent.action.VIEW"></action>
  21. <category android:name="android.intent.category.DEFAULT"></category>
  22. <category android:name="android.intent.category.BROWSABLE"></category>
  23. <data android:host="com.android.email.attachmentprovider" android:mimeType="*/*" android:scheme="content"></data>
  24. </intent-filter>
  25. </activity>
  26. </application>
  27. <uses-sdk android:minSdkVersion="7" />
  28. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
  29. <uses-permission android:name="android.permission.INTERNET"></uses-permission>
  30. </manifest>

里面几个关键点,需要注意。
就是新增的两组“intent-filter”和里面的“data”项。
其中,
“android:host="com.android.email.attachmentprovider" ”对应EMAIL;
“android:host="gmail-ls"”对应GMail。

接下来就是MainActivity了。

针对EMail的MainActivity:

[java] view plaincopy
  1. public class MainActivity extends Activity {  
  2.     private static final String FORMAT_RAW = "RAW";  
  3.     private static final String FORMAT_THUMBNAIL = "THUMBNAIL";  
  4.     private static final String E_MAIL_PATH = "com.android.email";  
  5.     /** Called when the activity is first created. */  
  6.     @Override  
  7.     public void onCreate(Bundle savedInstanceState) {  
  8.         super.onCreate(savedInstanceState);  
  9.         setContentView(R.layout.main);  
  10.         Intent intent = getIntent();  
  11.         String action = intent.getAction();  
  12.         if(Intent.ACTION_VIEW.equals(action)){  
  13.             String str = intent.getDataString();  
  14.             if(str != null){  
  15.                 Uri uri = null;  
  16.                 uri = Uri.parse(str);  
  17.                 List<String> segments = uri.getPathSegments();  
  18.                 String dbName = segments.get(0);  
  19.                 String id = segments.get(1);  
  20.                 String format = segments.get(2);  
  21.                   
  22.                 String filename;  
  23.                 if (FORMAT_THUMBNAIL.equals(format)) {  
  24.                     int width = Integer.parseInt(segments.get(3));  
  25.                     int height = Integer.parseInt(segments.get(4));  
  26.                     filename = "thmb_" + dbName + "_" + id;  
  27.                     File dir = getBaseContext().getCacheDir();  
  28.                     File file = new File(dir, filename);  
  29.                     if (!file.exists()) {  
  30.                         // THUMBNAIL格式的处理,这个貌似和本程序无关  
  31.                     }  
  32.                 }  
  33.                 else {  
  34.                     String db = getBaseContext().getDatabasePath(dbName ).toString()+ ".db_att";  
  35.                     filename =  db + File.separator + id;  
  36.                     String str1 = this.getPackageName();  
  37.                     filename = filename.replace(str1, E_MAIL_PATH);  
  38.                       
  39.                     // 拷贝过程,我这里偷懒,直接cat到sdcard的1文件了。  
  40.                     // 实际使用需要写个读写函数,还要从用户交互处获得写入的文件名  
  41.                     runRootCommand("cat " + filename + " > /sdcard/1");  
  42.                 }  
  43.         }      
  44.     }  
  45. }  

针对GMail的MainActivity:

[java] view plaincopy
  1. public class MainActivity extends Activity {  
  2.     /** Called when the activity is first created. */  
  3.     @Override  
  4.     public void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.main);  
  7.         Intent intent = getIntent();  
  8.         String action = intent.getAction();  
  9.         if(Intent.ACTION_VIEW.equals(action)){  
  10.                 try {  
  11.                     InputStream in = getContentResolver().openInputStream(getIntent().getData());  
  12.                     // 输出文件同样,需要增加人机交互  
  13.                     FileOutputStream  fos = new FileOutputStream("/sdcard/a.doc",true);  
  14.                     int ch = 0;  
  15.                     while((ch = in.read()) != -1){  
  16.                         fos.write(ch);  
  17.                     }  
  18.                     fos.close();  
  19.     
  20.                 } catch (MalformedURLException e) {  
  21.                     // TODO Auto-generated catch block  
  22.                     e.printStackTrace();  
  23.                 } catch (IOException e) {  
  24.                     // TODO Auto-generated catch block  
  25.                     e.printStackTrace();  
  26.                 }  
  27.         }      
  28.     }  
  29. }  

具体的成品,看我这几天哪天有空做个吧。其实还是很有用的东西。

Android GMail/EMail附件读取/存储简析相关推荐

  1. android 勿扰模式代码结构简析

    勿扰模式代码结构简析 标签: 勿扰模式 2017-08-08 11:05  60人阅读  评论(0)  收藏  举报   分类: android(59)  版权声明:本文为博主原创文章,未经博主允许不 ...

  2. Android V1及V2签名原理简析

    Android为了保证系统及应用的安全性,在安装APK的时候需要校验包的完整性,同时,对于覆盖安装的场景还要校验新旧是否匹配,这两者都是通过Android签名机制来进行保证的,本文就简单看下Andro ...

  3. android 勿扰模式代码,android 勿扰模式代码结构简析

    勿扰模式是Android 7.0开始加入的功能.它的核心思想是屏蔽了通知的铃声.振动和展示. 代码分散在几部分. 1.设置代码在Settings中,ZenMode开头的一系列文件 /packages/ ...

  4. mmap内存 android,Android中mmap原理及应用简析

    mmap是Linux中常用的系统调用API,用途广泛,Android中也有不少地方用到,比如匿名共享内存,Binder机制等.本文简单记录下Android中mmap调用流程及原理.mmap函数原型如下 ...

  5. Android热补丁技术—dexposed原理简析(手机淘宝采用方案)

    上篇文章<Android无线开发的几种常用技术>我们介绍了几种android移动应用开发中的常用技术,其中的热补丁正在被越来越多的开发团队所使用,它涉及到dalvik虚拟机和android ...

  6. android 系统升级 方法,ROM之家简析:Android手机系统怎么升级

    Android系统现在基本上每年都会有一次大的升级,以及很多次小的升级,对于手机用户来说,当然希望自己能用上最新版本的系统.除了手机厂商也会在适当时间发布官方版本系统升级,也可以自己在网上下载安装第三 ...

  7. Android Handler与Looper原理简析

    一直感觉自己简直就是一个弱智,最近越来越感觉是这样了,真的希望自己有一天能够认同自己,认同自己. 本文转载于:https://juejin.im/post/59083d7fda2f60005d14ef ...

  8. android中so文件格式详解,[原创]一 Android ELF系列:ELF文件格式简析到linker的链接so文件原理分析...

    Android ELF系列:ELF文件格式简析和linker的链接so文件原理分析 Android ELF系列:实现一个so文件加载器 Android ELF系列:手写一个so文件(包含两个导出函数) ...

  9. Android Jetpack组件App Startup简析

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

最新文章

  1. java金字塔数字代码_Java基础代码实例 :在控制台中输出金字塔,这个金字塔是由左右对称的数字组成的。 | 学步园...
  2. 导入别的项目到我的eclipse上出现红色感叹号问题解决方案
  3. 前端技巧之苹果官网效果分析
  4. Netty堆外内存泄露排查与总结 1
  5. 用python编程输入三角形的三条边判断是否构成三角形_vb三角形编程输入三条边,判断能否构成三角形.看我的编程是否有问题,...
  6. html插入mv,视屏如何插入html
  7. 2015-5-23PDF的下载链接
  8. python制作词云图
  9. 围棋单机版-纵横十九道,迷煞多少人
  10. 研究:信仰能帮助人坦然面对挫折
  11. java 笔画排序_中文排序 - 笔画
  12. PHP 屏幕亮度,window_Win8系统 调节电脑屏幕亮度的四种方法,第一页:Win8系统下调节电脑屏 - phpStudy...
  13. mysql5.045_Microsoft SQL Server数据库各版本下载地址集合
  14. iSCSI Initiator命名规范
  15. OVP过压保护IC高耐压36V,首选钰泰ETA7008/ETA7014
  16. python kmean 多维_绘制多维Kmeans集群NLP python
  17. WG225模块(SDIO WIFI)调试记录
  18. 呆在家睡觉,倒不如在家学习
  19. vac虚拟声卡我linux,Virtual Audio Cable
  20. 纳米器件,量子点理论文献拾遗

热门文章

  1. nao机器人Python+pycharm+naoqi平台搭建
  2. 介绍自己的优缺点有技巧
  3. F5 VPR与5050作N+M Scale实施问题记录
  4. 腾讯云短信服务-单个短信发送(maven)
  5. SQL server笔记--SQL server 创建删除数据库
  6. Revit插件 | Unbelievable,有人居然自己写代码搞『批量喷头 』
  7. 深度学习新的采样方式和损失函数--论文笔记
  8. 猜测一下以前的pp助手里的越狱应用是怎么制作的
  9. iFunk品牌影响力不断攀升
  10. 双十一购物节,iFunk双子苏宁发售