Android GMail/EMail附件读取/存储简析
作者:emneg-zeerd
首发:http://www.itfunz.com/thread-19343-1-1.html
一如既往的无图无真相!
我们都知道,Android自带的GMail和EMail都非常蛋疼的不支持附件存储。这就导致很多问题,比如apk无法安装……
下面,简单介绍一下GMail/EMail附件读取存储的准备知识。
既然目标已经明确了,那么首先要做的事情就是在我们点击GMail/EMail的打开附件按钮时,需要相应我们自己编写的应用程序。
这里大概用到了一些filter的知识,我的另一篇文章《android文件关联的实现以及参数获取》中曾经简单的提过,有幸去看一看看。
这里还是直接给出xml文件:
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.pickattach"
- android:versionCode="1"
- android:versionName="1.0">
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".MainActivity"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- <intent-filter>
- <action android:name="android.intent.action.VIEW"></action>
- <category android:name="android.intent.category.DEFAULT"></category>
- <category android:name="android.intent.category.BROWSABLE"></category>
- <data android:scheme="content" android:host="gmail-ls" android:mimeType="*/*"></data>
- </intent-filter>
- <intent-filter>
- <action android:name="android.intent.action.VIEW"></action>
- <category android:name="android.intent.category.DEFAULT"></category>
- <category android:name="android.intent.category.BROWSABLE"></category>
- <data android:host="com.android.email.attachmentprovider" android:mimeType="*/*" android:scheme="content"></data>
- </intent-filter>
- </activity>
- </application>
- <uses-sdk android:minSdkVersion="7" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
- <uses-permission android:name="android.permission.INTERNET"></uses-permission>
- </manifest>
里面几个关键点,需要注意。
就是新增的两组“intent-filter”和里面的“data”项。
其中,
“android:host="com.android.email.attachmentprovider" ”对应EMAIL;
“android:host="gmail-ls"”对应GMail。
接下来就是MainActivity了。
针对EMail的MainActivity:
- public class MainActivity extends Activity {
- private static final String FORMAT_RAW = "RAW";
- private static final String FORMAT_THUMBNAIL = "THUMBNAIL";
- private static final String E_MAIL_PATH = "com.android.email";
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- Intent intent = getIntent();
- String action = intent.getAction();
- if(Intent.ACTION_VIEW.equals(action)){
- String str = intent.getDataString();
- if(str != null){
- Uri uri = null;
- uri = Uri.parse(str);
- List<String> segments = uri.getPathSegments();
- String dbName = segments.get(0);
- String id = segments.get(1);
- String format = segments.get(2);
- String filename;
- if (FORMAT_THUMBNAIL.equals(format)) {
- int width = Integer.parseInt(segments.get(3));
- int height = Integer.parseInt(segments.get(4));
- filename = "thmb_" + dbName + "_" + id;
- File dir = getBaseContext().getCacheDir();
- File file = new File(dir, filename);
- if (!file.exists()) {
- // THUMBNAIL格式的处理,这个貌似和本程序无关
- }
- }
- else {
- String db = getBaseContext().getDatabasePath(dbName ).toString()+ ".db_att";
- filename = db + File.separator + id;
- String str1 = this.getPackageName();
- filename = filename.replace(str1, E_MAIL_PATH);
- // 拷贝过程,我这里偷懒,直接cat到sdcard的1文件了。
- // 实际使用需要写个读写函数,还要从用户交互处获得写入的文件名
- runRootCommand("cat " + filename + " > /sdcard/1");
- }
- }
- }
- }
针对GMail的MainActivity:
- public class MainActivity extends Activity {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- Intent intent = getIntent();
- String action = intent.getAction();
- if(Intent.ACTION_VIEW.equals(action)){
- try {
- InputStream in = getContentResolver().openInputStream(getIntent().getData());
- // 输出文件同样,需要增加人机交互
- FileOutputStream fos = new FileOutputStream("/sdcard/a.doc",true);
- int ch = 0;
- while((ch = in.read()) != -1){
- fos.write(ch);
- }
- fos.close();
- } catch (MalformedURLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- }
具体的成品,看我这几天哪天有空做个吧。其实还是很有用的东西。
Android GMail/EMail附件读取/存储简析相关推荐
- android 勿扰模式代码结构简析
勿扰模式代码结构简析 标签: 勿扰模式 2017-08-08 11:05 60人阅读 评论(0) 收藏 举报 分类: android(59) 版权声明:本文为博主原创文章,未经博主允许不 ...
- Android V1及V2签名原理简析
Android为了保证系统及应用的安全性,在安装APK的时候需要校验包的完整性,同时,对于覆盖安装的场景还要校验新旧是否匹配,这两者都是通过Android签名机制来进行保证的,本文就简单看下Andro ...
- android 勿扰模式代码,android 勿扰模式代码结构简析
勿扰模式是Android 7.0开始加入的功能.它的核心思想是屏蔽了通知的铃声.振动和展示. 代码分散在几部分. 1.设置代码在Settings中,ZenMode开头的一系列文件 /packages/ ...
- mmap内存 android,Android中mmap原理及应用简析
mmap是Linux中常用的系统调用API,用途广泛,Android中也有不少地方用到,比如匿名共享内存,Binder机制等.本文简单记录下Android中mmap调用流程及原理.mmap函数原型如下 ...
- Android热补丁技术—dexposed原理简析(手机淘宝采用方案)
上篇文章<Android无线开发的几种常用技术>我们介绍了几种android移动应用开发中的常用技术,其中的热补丁正在被越来越多的开发团队所使用,它涉及到dalvik虚拟机和android ...
- android 系统升级 方法,ROM之家简析:Android手机系统怎么升级
Android系统现在基本上每年都会有一次大的升级,以及很多次小的升级,对于手机用户来说,当然希望自己能用上最新版本的系统.除了手机厂商也会在适当时间发布官方版本系统升级,也可以自己在网上下载安装第三 ...
- Android Handler与Looper原理简析
一直感觉自己简直就是一个弱智,最近越来越感觉是这样了,真的希望自己有一天能够认同自己,认同自己. 本文转载于:https://juejin.im/post/59083d7fda2f60005d14ef ...
- android中so文件格式详解,[原创]一 Android ELF系列:ELF文件格式简析到linker的链接so文件原理分析...
Android ELF系列:ELF文件格式简析和linker的链接so文件原理分析 Android ELF系列:实现一个so文件加载器 Android ELF系列:手写一个so文件(包含两个导出函数) ...
- Android Jetpack组件App Startup简析
1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...
最新文章
- java金字塔数字代码_Java基础代码实例 :在控制台中输出金字塔,这个金字塔是由左右对称的数字组成的。 | 学步园...
- 导入别的项目到我的eclipse上出现红色感叹号问题解决方案
- 前端技巧之苹果官网效果分析
- Netty堆外内存泄露排查与总结 1
- 用python编程输入三角形的三条边判断是否构成三角形_vb三角形编程输入三条边,判断能否构成三角形.看我的编程是否有问题,...
- html插入mv,视屏如何插入html
- 2015-5-23PDF的下载链接
- python制作词云图
- 围棋单机版-纵横十九道,迷煞多少人
- 研究:信仰能帮助人坦然面对挫折
- java 笔画排序_中文排序 - 笔画
- PHP 屏幕亮度,window_Win8系统 调节电脑屏幕亮度的四种方法,第一页:Win8系统下调节电脑屏 - phpStudy...
- mysql5.045_Microsoft SQL Server数据库各版本下载地址集合
- iSCSI Initiator命名规范
- OVP过压保护IC高耐压36V,首选钰泰ETA7008/ETA7014
- python kmean 多维_绘制多维Kmeans集群NLP python
- WG225模块(SDIO WIFI)调试记录
- 呆在家睡觉,倒不如在家学习
- vac虚拟声卡我linux,Virtual Audio Cable
- 纳米器件,量子点理论文献拾遗