`
zzmccnu
  • 浏览: 73887 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Android执行打开文件的总结

阅读更多

1. Android里面,要打开各种类型的文件,例如PDF,PPT,WORD,EXCEL,CHM,HTML,TEXT,AUDIO,VIDEO ,可以通过Intent来办到。

整理了一个Intent的工具类:

import java.io.File;

import android.content.Intent;
import android.net.Uri;

//PDF,PPT,WORD,EXCEL,CHM,HTML,TEXT,AUDIO,VIDEO   
//示例:   
//Intent it = getTextFileIntent("/sdcard/hello.txt",false);  
//startActivity(it);  

public class OpenFileIntent {

	// android获取一个用于打开HTML文件的intent
	public static Intent getHtmlFileIntent(String param) {
		Uri uri = Uri.parse(param).buildUpon().encodedAuthority("com.android.htmlfileprovider").scheme("content").encodedPath(param).build();
		Intent intent = new Intent("android.intent.action.VIEW");
		intent.setDataAndType(uri, "text/html");
		return intent;
	}

	// android获取一个用于打开图片文件的intent
	public static Intent getImageFileIntent(String param) {
		Intent intent = new Intent("android.intent.action.VIEW");
		intent.addCategory("android.intent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		Uri uri = Uri.fromFile(new File(param));
		intent.setDataAndType(uri, "image/*");
		return intent;
	}

	// android获取一个用于打开PDF文件的intent
	public static Intent getPdfFileIntent(String param) {
		Intent intent = new Intent("android.intent.action.VIEW");
		intent.addCategory("android.intent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		Uri uri = Uri.fromFile(new File(param));
		intent.setDataAndType(uri, "application/pdf");
		return intent;
	}

	// android获取一个用于打开文本文件的intent
	public static Intent getTextFileIntent(String param, boolean paramBoolean) {
		Intent intent = new Intent("android.intent.action.VIEW");
		intent.addCategory("android.intent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		if (paramBoolean) {
			Uri uri1 = Uri.parse(param);
			intent.setDataAndType(uri1, "text/plain");
		} else {
			Uri uri2 = Uri.fromFile(new File(param));
			intent.setDataAndType(uri2, "text/plain");
		}
		return intent;
	}

	// android获取一个用于打开音频文件的intent
	public static Intent getAudioFileIntent(String param) {
		Intent intent = new Intent("android.intent.action.VIEW");
		intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
		intent.putExtra("oneshot", 0);
		intent.putExtra("configchange", 0);
		Uri uri = Uri.fromFile(new File(param));
		intent.setDataAndType(uri, "audio/*");
		return intent;
	}

	// android获取一个用于打开视频文件的intent
	public static Intent getVideoFileIntent(String param) {
		Intent intent = new Intent("android.intent.action.VIEW");
		intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
		intent.putExtra("oneshot", 0);
		intent.putExtra("configchange", 0);
		Uri uri = Uri.fromFile(new File(param));
		intent.setDataAndType(uri, "video/*");
		return intent;
	}

	// android获取一个用于打开CHM文件的intent
	public static Intent getChmFileIntent(String param) {
		Intent intent = new Intent("android.intent.action.VIEW");
		intent.addCategory("android.intent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		Uri uri = Uri.fromFile(new File(param));
		intent.setDataAndType(uri, "application/x-chm");
		return intent;
	}

	// android获取一个用于打开Word文件的intent
	public static Intent getWordFileIntent(String param) {
		Intent intent = new Intent("android.intent.action.VIEW");
		intent.addCategory("android.intent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		Uri uri = Uri.fromFile(new File(param));
		intent.setDataAndType(uri, "application/msword");
		return intent;
	}

	// android获取一个用于打开Excel文件的intent
	public static Intent getExcelFileIntent(String param) {
		Intent intent = new Intent("android.intent.action.VIEW");
		intent.addCategory("android.intent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		Uri uri = Uri.fromFile(new File(param));
		intent.setDataAndType(uri, "application/vnd.ms-excel");
		return intent;
	}

	// android获取一个用于打开PPT文件的intent
	public static Intent getPptFileIntent(String param) {
		Intent intent = new Intent("android.intent.action.VIEW");
		intent.addCategory("android.intent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		Uri uri = Uri.fromFile(new File(param));
		intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
		return intent;
	}

}

 

2. 如果没有使用UncaughtExceptionHandler类来处理全局异常,那么程序将异常退出造成不好的用户体验。为了防止ActivityNotFoundException错误的出现,在启动Activity之前先判断Intent是否存在。

public static boolean isIntentAvailable(Context context, Intent intent) {
    final PackageManager packageManager = context.getPackageManager();
    List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
            PackageManager.GET_ACTIVITIES);
    return list.size() > 0;
}
 
分享到:
评论

相关推荐

    Android 实现读写U盘文件

    Android 基于libaums实现读写U盘文件,相关博客:https://blog.csdn.net/a512337862/article/details/80505128

    Android文件管理器源码

    Android文件管理器(增加了文件夹复制移动,下载资源暂停删除等,以及复制过程中的可视化进程)是一个基于Android开发的应用,包含常用文件操作以及文件下载功能,文件操作包括打开文件夹和打开各类的文件(apk、avi...

    Android_Toolkit_V1.4(Android开发工具集)

    在Android模拟器打开shell,可执行Android Linux部分命令。 3.打开本地DOS命令窗口,方便开发人员与打开的Android模拟器通讯。 4.获取Android模拟器的文件系统,实现了文件目录浏览、文件上传和下载功能(可以...

    android文件管理器源码

    android系统并不自带文件管理器,但是很多情况下,我们有诸如从SD中打开文件的需要. 下面介绍在代码中实现资源管理器,只需要一百行左右的一个类即可以最常用的文件选择功能。本代码为简单的文件管理器的实现,可独立...

    解包打包android内核system.img文件所需工具

    打开解包目录下的\framework\framework-res.apk 替换图片:framework-res.apk\assets\images\android-logo-mask.png为下图: 然后对\framework\framework-res.apk文件重新签名,复制到linux下后修改文件权限...

    android 之 webView 显示h5 执行选择图片或者拍照功能

    开发工具是 android studio SDK版本是 4.3 实现过程基本是这样 h5中调用手机选择文件图片的代码是: *" capture="camera" id="imgFile" name="imgFile" type="file"&gt; 用安卓的 webView 控件来显示h5网页 然后给...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    Android-Shell:在Android上执行Linux命令

    在android上执行Linux命令是一种高级方法,可用于访问手机中受限制的功能,例如,您无法直接从编程中获得这些功能; 录制屏幕,删除损坏的文件,获取系统信息,进程,硬件信息。 除非您拥有根设备,否则有些命令将不...

    Android Studio使用Kotlin时,修改代码后运行不生效的解决方法

    前段时间升级 Android Studio 3.1.3+ 版本后,决定尝试使用 Kotlin 做 APP 开发看看。结果却发现,修改 String 资源后,“运行”,修改的内容没有生效。一开始以为只是 String 资源是这样,于是试了下 kt 文件,结果...

    Android ndk编译cpp代码后把执行文件推送到手机且授权执行的自动化脚本

    当我们ndk编译cpp之后需要手动执行ndk-build,把执行文件上传手机中,手机打开授予权限,执行文件等整个过程繁琐,可以通过脚本来一条龙完成,专注于代码的编写,不浪费编译和传送的时间。

    Android项目设计与开发:基本文件存储.ppt

    嵌入式Android项目设计与开发 第六章 数据存储 ——基本文件存储 基本文件存储 基本文件存储就是以一种字符文件形式保存数据,数据呈现一种链式的状态,没有任何数据结构,也缺乏管理机制,但他是最基本的数据存储...

    mac Android反编译

    Android mac下反编译 apktool 反编译得到的是布局和资源文件。 dex2jar 反编译得到的代码字节码,利用jd gui就可以查看到源代码。 1.apktool安装 1)下载apktool,及mac下apk-install-macosx 2)解压这两个文件...

    《Android系统源代码情景分析》

    2.2 开发C可执行程序验证Android硬件驱动程序 2.3 开发Android硬件抽象层模块 2.3.1 硬件抽象层模块编写规范 2.3.2 编写硬件抽象层模块接口 2.3.3 硬件抽象层模块的加载过程 2.3.4 处理硬件设备访问权限...

    ActiveMQ实现Android端的消息推送,包含Android端和Server端的代码和使用说明

    1、解压安装文件,执行\apache-activemq-5.13.3-bin\apache-activemq-5.13.3\bin\win64\wrapper.exe. 2、测试发送消息,打开本地服务器地址http://localhost:8161,登录服务器,默认用户名密码:admin,admin。登录...

    获取android设备序列号

    这是一个可执行文件,双击打开cmd窗口,自动显示计算机上连接的android设备序列号

    android VNC

    (下面文件:androidvncserver和源码地址已经优化更改,省去必须用SVN获得源码) 1)下载androidvncserver: http://dl.dbank.com/c044xm5255 有兴趣的可以下载源码自己重新编译,源码地址: (源码需要在linux下mk) ...

    android2.3 sdk管理器.zip

    如果在你的C:\android-sdk-windows\tools目录下并没有adb.exe这个可执行文件。并且当你打开eclipse时,有关Android的插件会报错。这时你就应该这样做:首先,改一下你的环境变量,把原来的C:\android-sdk-windows\...

    Android系统源代码情景分析-罗升阳-源码

    2.2 开发C可执行程序验证Android硬件驱动程序 2.3 开发Android硬件抽象层模块 2.3.1 硬件抽象层模块编写规范 2.3.2 编写硬件抽象层模块接口 2.3.3 硬件抽象层模块的加载过程 2.3.4 处理硬件设备访问权限问题 ...

    Android程序设计基础

    所有程序都是用Java语言编写的,并且将由Android的Dalvik虚拟机执行,所以代码在ARM、x86和其他架构之间是可以移植的。Android提供了对各种输入方法的支持,比如说键盘、触摸屏和轨迹球。用户界面可以针对任何屏幕...

    rive-android

    设置克隆仓库初始化子模块将目录作为Android Studio项目打开运行示例应用概述该运行时使用作为其基础层,并利用了NDK。 /kotlin文件夹包含库代码以及与C ++层的接口。 /cpp文件夹包含使用JNI与库连接的C ++代码。 /...

Global site tag (gtag.js) - Google Analytics