我一直在寻找这个,但我无法让它正常工作.让我解释.

我有一个Android应用程序,可以将文件(图像,文档,…)保存在缓存目录中.起初我曾经使用getExternalCacheDir()方法并将它们保存在那里,但因为它应该缓存在没有SD卡的设备上,所以我必须使用getCacheDir().

当我以前使用getExternalCacheDir()方法时,在这样的另一个应用程序中打开这些文件是没有问题的:

Intent intent = new Intent();

intent.setAction(Intent.ACTION_VIEW);

intent.setDataAndType(Uri.fromFile(file), mimetype);

但是在使用getCacheDir()时,这些文件将保存在应用程序沙箱中,并且无法从应用程序外部访问.所以我用谷歌搜索了它,然后来了** ContentProvider. ContentProvider可以使用外部应用程序打开私有文件.但是当我尝试实现它时,它不起作用.

package com.myapplication.providers;

import java.io.File;

import java.io.FileNotFoundException;

import android.content.ContentProvider;

import android.content.ContentValues;

import android.database.Cursor;

import android.net.Uri;

import android.os.ParcelFileDescriptor;

public class FileProvider extends ContentProvider {

@Override

public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {

File privateFile = new File(getContext().getCacheDir(), uri.getPath());

return ParcelFileDescriptor.open(privateFile, ParcelFileDescriptor.MODE_READ_ONLY);

}

@Override

public int delete(Uri arg0, String arg1, String[] arg2) {

return 0;

}

@Override

public String getType(Uri arg0) {

return null;

}

@Override

public Uri insert(Uri arg0, ContentValues arg1) {

return null;

}

@Override

public boolean onCreate() {

return false;

}

@Override

public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3,

String arg4) {

return null;

}

@Override

public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {

return 0;

}

}

将此提供程序添加到应用程序清单

android:name="com.myapplication.providers.FileProvider"

android:authorities="com.myapplication"

android:exported="true" />

并使用此代码打开文件:

Uri uri = Uri.parse("content://com.myapplication/" + filename);

Intent intent = new Intent();

intent.setAction(Intent.ACTION_VIEW);

intent.setDataAndType(uri, mimetype);

提前致谢!

显示android缓存文件,android – 使用ACTION_VIEW在缓存目录中打开文件相关推荐

  1. 各种浏览器的缓存文件的位置和修改缓存目录的方法

    一.手动清空缓存 1.Opera 清除Opera浏览器的缓存的方法:打开Opera,工具->首选项->高级->历史->点击立即清空按钮就可以清除Opera浏览器的缓存. 2.I ...

  2. android 访问存储卡,Android:无法访问存储在SD卡中的文件

    我正在研究一个读取存储在SD卡(内部/数据/本地)中的.txt文件的应用程序.我遇到的问题是,它似乎可以访问文件路径,但它不能访问文件本身(尽管它具有读取和写入权限),但会引发FileNotFound ...

  3. java中打开文件显示_在默认文件资源管理器中打开文件,并使用JavaFX或普通Java突出显示它...

    我想做标题所说的. 部分解决方案 例如,在Windows中,您可以使用以下代码在默认资源管理器中打开文件并突出显示它. (虽然它需要修改包含空格的文件): /** * Opens the file w ...

  4. android上传sd卡文件格式,Android开发学习:向模拟器的sdcard中添加文件

    向模拟器的sdcard中添加文件有两种方法: 1.在eclipse的DDMS视图中操作 启动eclipse---打开DDMS视图---选择File Explorer,出现下面的窗口 选中sdcard文 ...

  5. python显示目录中的文件_Python中的文件和目录操作实现

    Python中的文件和目录操作实现 对于文件和目录的处理,虽然可以通过操作系统命令来完成,但是Python语言为了便于开发人员以编程的方式处理相关工作,提供了许多处理文件和目录的内置函数.重要的是,这 ...

  6. android activity从新打开,【Android开发-8】生命周期,Activity中打开另一个Activity

    前言:生命中有不少人陪伴本身走过一辈子中的某段旅程,仅仅是有些人仅仅是某阶段出现,有些人却陪伴本身很是久.就像小学.中学.高中.大学,那些之前觉得会长久拥有的,当经历过天涯各地地忙碌于生活,或如意.或 ...

  7. android studio 2.3.1 r丢失,AndroidStudio中 R文件缺失的办法

    flex自适应小例子 libcurl使用easy模式阻塞卡死等问题的完美解决 引言: 由于要在android手机测进行DM开发, 其中最重要的就是FUMO和SCOMO下载, 下载使用的是linux开源 ...

  8. 将android程序写入内存,android中将数据写入手机内存和sdcard中的文件

    在android中一般有两种方式: 第一种是写入手机内存的文件,这种方式,文件的存取路径都是在应用包下的 files 文件夹下,其路径是固定的,并不受程序员控制的, FileOutputStream ...

  9. Android 使用MediaPlayer播放assets或者raw目录的音频文件

    不废话,需求:当接收到推送消息时,播放apk自带的声音,怎么办? 首先接入极光推送,我前几篇文章已经讲了,不会的自己去看.在MyReceiver里的public void onReceive(Cont ...

最新文章

  1. pci串口驱动安装失败_TSC TTP-243E Pluse装LTP并口驱动无法安装
  2. C#读写word,文段及表格
  3. 解决Spring Cloud中Feign/Ribbon第一次请求失败的方法
  4. 2015-03-19 My Appointment text read case
  5. java pdf添加图片水印图片_Java 在PDF中添加文本水印、图片水印
  6. 判断鼠标不在控件上_VB常用控件属性讲解单选按钮、复选框总结
  7. python中异或运算_python – 基于ID列表有效计算XOR(^)校验和的方法
  8. java如何脱离ide运行_如何脱离IDE使用自己的jar包?
  9. 5、main方法详解
  10. tsung压测mysql_高并发测试工具Tsung使用教程
  11. es的node内存设置
  12. OpenSSH学习笔记(安装配置openssh-4.6p1)[zz]
  13. c语言对字符串逆序,【C语言】 字符串逆序
  14. 去掉输入法上的CH和EN
  15. java学生成绩降序代码_输入5名学员成绩,降序排列输出
  16. python 霍夫直线变换_霍夫线变换
  17. BDTC2014中国大数据技术大会 会议记录
  18. Revit插件推荐[一]
  19. 机器人运动学逆解中最常用的三角方程(附代码)
  20. Unity 上传自定义头像

热门文章

  1. 030_jdbc-mysql事务
  2. mysql导入数据表大小限制,解除phpMyAdmin导入大型MySQL数据库文件大小限制
  3. mysql按特定的顺序_如何在MySQL中按特定顺序排列数据?
  4. 升级bios_ThinkPad如何升级BIOS?我来教你!
  5. 牛客java面试题总结版(四)
  6. 在linux下Qt使用sqlite,QT中SQLite使用【实例】
  7. php电商交押金的逻辑,PHP高并发下抢购、秒杀功能的超卖问题
  8. 计算机专业大学排名_计算机专业大学排名公布:大连大学、辽宁师范大学冲进前一百...
  9. c语言循环程序设计教案,10 《C语言程序设计》教案 第三章 程序的控制结构(6)—循环结构 while和do while.doc...
  10. java并发性是指什么_java – 什么是“非阻塞”并发,它与普通并发性有什么不同?...