Android编程开发之打开文件的Intent及使用方法

所属分类: 软件编程 / Android 阅读数: 686
收藏 0 赞 0 分享

本文实例讲述了Android编程开发之打开文件的Intent及使用方法。分享给大家供大家参考,具体如下:

在写文件管理系统时会用到各种打开不同格式的文件的需求,由于Android系统默认内置了一些可以打开的系统应用,但还是不能满足需求,比如打开视频文件、word等,需要安装相应的播放软件才可以使用,这时程序会通过Intent查找可以使用的软件实现通过代码打开一个文件需要2部分,一部分是要获取到不同文件的后缀,以便根据需求匹配相应的Intent,另一个就是不同格式的文件打开的Intent不同

1、在values目录下定义后缀数组文件fileendings

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<array name="fileEndingImage"> 
<item>.png</item> 
<item>.gif</item> 
<item>.jpg</item> 
<item>.jpeg</item> 
<item>.bmp</item> 
</array> 
<array name="fileEndingAudio"> 
<item>.mp3</item> 
<item>.wav</item> 
<item>.ogg</item> 
<item>.midi</item> 
</array> 
<array name="fileEndingVideo"> 
<item>.mp4</item> 
<item>.rmvb</item> 
<item>.avi</item> 
<item>.flv</item> 
</array> 
<array name="fileEndingPackage"> 
<item>.jar</item> 
<item>.zip</item> 
<item>.rar</item> 
<item>.gz</item> 
<item>.apk</item> 
<item>.img</item> 
</array> 
<array name="fileEndingWebText"> 
<item>.htm</item> 
<item>.html</item> 
<item>.php</item> 
<item>.jsp</item> 
</array> 
<array name="fileEndingText"> 
<item>.txt</item> 
<item>.java</item> 
<item>.c</item> 
<item>.cpp</item> 
<item>.py</item> 
<item>.xml</item> 
<item>.json</item> 
<item>.log</item> 
</array> 
<array name="fileEndingWord"> 
<item>.doc</item> 
<item>.docx</item> 
</array> 
<array name="fileEndingExcel"> 
<item>.xls</item> 
<item>.xlsx</item> 
</array> 
<array name="fileEndingPPT"> 
<item>.ppt</item> 
<item>.pptx</item> 
</array> 
<array name="fileEndingPdf"> 
<item>.p<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<array name="fileEndingImage"> 
<item>.png</item> 
<item>.gif</item> 
<item>.jpg</item> 
<item>.jpeg</item> 
<item>.bmp</item> 
</array> 
<array name="fileEndingAudio"> 
<item>.mp3</item> 
<item>.wav</item> 
<item>.ogg</item> 
<item>.midi</item> 
</array> 
<array name="fileEndingVideo"> 
<item>.mp4</item> 
<item>.rmvb</item> 
<item>.avi</item> 
<item>.flv</item> 
</array> 
<array name="fileEndingPackage"> 
<item>.jar</item> 
<item>.zip</item> 
<item>.rar</item> 
<item>.gz</item> 
<item>.apk</item> 
<item>.img</item> 
</array> 
<array name="fileEndingWebText"> 
<item>.htm</item> 
<item>.html</item> 
<item>.php</item> 
<item>.jsp</item> 
</array> 
<array name="fileEndingText"> 
<item>.txt</item> 
<item>.java</item> 
<item>.c</item> 
<item>.cpp</item> 
<item>.py</item> 
<item>.xml</item> 
<item>.json</item> 
<item>.log</item> 
</array> 
<array name="fileEndingWord"> 
<item>.doc</item> 
<item>.docx</item> 
</array> 
<array name="fileEndingExcel"> 
<item>.xls</item> 
<item>.xlsx</item> 
</array> 
<array name="fileEndingPPT"> 
<item>.ppt</item> 
<item>.pptx</item> 
</array> 
<array name="fileEndingPdf"> 
<item>.pdf</item> 
</array> 
</resources>df</item> 
</array> 
</resources>

2、定义OpenFiles工具类,只需传输File参数即可,然后通过返回的Intent打开文件

public class OpenFiles { 
//android获取一个用于打开HTML文件的intent 
public static Intent getHtmlFileIntent(File file) 
{ 
Uri uri = Uri.parse(file.toString()).buildUpon().encodedAuthority("com.android.htmlfileprovider").scheme("content").encodedPath(file.toString()).build(); 
Intent intent = new Intent("android.intent.action.VIEW"); 
intent.setDataAndType(uri, "text/html"); 
return intent; 
} 
//android获取一个用于打开图片文件的intent 
public static Intent getImageFileIntent(File file) 
{ 
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(file); 
intent.setDataAndType(uri, "image/*"); 
return intent; 
} 
//android获取一个用于打开PDF文件的intent 
public static Intent getPdfFileIntent(File file) 
{ 
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(file); 
intent.setDataAndType(uri, "application/pdf"); 
return intent; 
} 
//android获取一个用于打开文本文件的intent 
public static Intent getTextFileIntent(File file) 
{ 
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(file); 
intent.setDataAndType(uri, "text/plain"); 
return intent; 
} 
//android获取一个用于打开音频文件的intent 
public static Intent getAudioFileIntent(File file) 
{ 
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(file); 
intent.setDataAndType(uri, "audio/*"); 
return intent; 
} 
//android获取一个用于打开视频文件的intent 
public static Intent getVideoFileIntent(File file) 
{ 
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(file); 
intent.setDataAndType(uri, "video/*"); 
return intent; 
} 
//android获取一个用于打开CHM文件的intent 
public static Intent getChmFileIntent(File file) 
{ 
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(file); 
intent.setDataAndType(uri, "application/x-chm"); 
return intent; 
} 
//android获取一个用于打开Word文件的intent 
public static Intent getWordFileIntent(File file) 
{ 
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(file); 
intent.setDataAndType(uri, "application/msword"); 
return intent; 
} 
//android获取一个用于打开Excel文件的intent 
public static Intent getExcelFileIntent(File file) 
{ 
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(file); 
intent.setDataAndType(uri, "application/vnd.ms-excel"); 
return intent; 
} 
//android获取一个用于打开PPT文件的intent 
public static Intent getPPTFileIntent(File file) 
{ 
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(file); 
intent.setDataAndType(uri, "application/vnd.ms-powerpoint"); 
return intent; 
} 
//android获取一个用于打开apk文件的intent 
public static Intent getApkFileIntent(File file) 
{ 
Intent intent = new Intent(); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.setAction(android.content.Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); 
return intent; 
} 
}

3、定义用于检查要打开的文件的后缀是否在遍历后缀数组中

private boolean checkEndsWithInStringArray(String checkItsEnd, 
String[] fileEndings){ 
for(String aEnd : fileEndings){ 
if(checkItsEnd.endsWith(aEnd)) 
return true; 
} 
return false; 
}

4、通过调用OpenFiles类返回的Intent,打开相应的文件

if(currentPath!=null&¤tPath.isFile()) 
{ 
String fileName = currentPath.toString(); 
Intent intent; 
if(checkEndsWithInStringArray(fileName, getResources(). 
getStringArray(R.array.fileEndingImage))){ 
intent = OpenFiles.getImageFileIntent(currentPath); 
startActivity(intent); 
}else if(checkEndsWithInStringArray(fileName, getResources(). 
getStringArray(R.array.fileEndingWebText))){ 
intent = OpenFiles.getHtmlFileIntent(currentPath); 
startActivity(intent); 
}else if(checkEndsWithInStringArray(fileName, getResources(). 
getStringArray(R.array.fileEndingPackage))){ 
intent = OpenFiles.getApkFileIntent(currentPath); 
startActivity(intent); 
}else if(checkEndsWithInStringArray(fileName, getResources(). 
getStringArray(R.array.fileEndingAudio))){ 
intent = OpenFiles.getAudioFileIntent(currentPath); 
startActivity(intent); 
}else if(checkEndsWithInStringArray(fileName, getResources(). 
getStringArray(R.array.fileEndingVideo))){ 
intent = OpenFiles.getVideoFileIntent(currentPath); 
startActivity(intent); 
}else if(checkEndsWithInStringArray(fileName, getResources(). 
getStringArray(R.array.fileEndingText))){ 
intent = OpenFiles.getTextFileIntent(currentPath); 
startActivity(intent); 
}else if(checkEndsWithInStringArray(fileName, getResources(). 
getStringArray(R.array.fileEndingPdf))){ 
intent = OpenFiles.getPdfFileIntent(currentPath); 
startActivity(intent); 
}else if(checkEndsWithInStringArray(fileName, getResources(). 
getStringArray(R.array.fileEndingWord))){ 
intent = OpenFiles.getWordFileIntent(currentPath); 
startActivity(intent); 
}else if(checkEndsWithInStringArray(fileName, getResources(). 
getStringArray(R.array.fileEndingExcel))){ 
intent = OpenFiles.getExcelFileIntent(currentPath); 
startActivity(intent); 
}else if(checkEndsWithInStringArray(fileName, getResources(). 
getStringArray(R.array.fileEndingPPT))){ 
intent = OpenFiles.getPPTFileIntent(currentPath); 
startActivity(intent); 
}else 
{ 
showMessage("无法打开,请安装相应的软件!"); 
} 
}else 
{ 
showMessage("对不起,这不是文件!"); 
} 

希望本文所述对大家Android程序设计有所帮助。

更多精彩内容其他人还在看

老生常谈Android HapticFeedback(震动反馈)

下面小编就为大家带来一篇老生常谈Android HapticFeedback(震动反馈)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详谈OnTouchListener与OnGestureListener的区别

下面小编就为大家带来一篇详谈OnTouchListener与OnGestureListener的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android仿知乎悬浮功能按钮FloatingActionButton效果

前段时间在看属性动画,恰巧这个按钮的效果可以用属性动画实现,下面通过本文给大家分享adroid仿知乎悬浮功能按钮FloatingActionButton效果,需要的朋友参考下吧
收藏 0 赞 0 分享

解决Android V7后自定义Toolbar、ActionBar左侧有空白问题

这篇文章主要介绍的Android V7后自定义Toolbar、ActionBar左侧有空白问题的解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android常见控件使用详解

这篇文章主要为大家详细介绍了Android常见控件的使用方法,包括ProgressBar进度条控件、AlertDialog对话框控件等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android实现简洁的APP更新dialog数字进度条

这篇文章主要为大家详细介绍了Android实现简洁的APP更新dialog数字进度条,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android 判断当前语言环境是否是中文环境

本文主要介绍了Android 判断当前语言环境是否是中文环境的方法。具有很好的参考价值。下面跟着小编一起来看下吧
收藏 0 赞 0 分享

详谈Android中Matrix的set、pre、post的区别

下面小编就为大家带来一篇详谈Android中Matrix的set、pre、post的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android实现登录界面记住密码的存储

这篇文章主要为大家详细介绍了Android SharedPreferrences实现登录界面记住密码的存储,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android 使用SharedPreferrences储存密码登录界面记住密码功能

Android存储方式有很多种,在这里所用的存储方式是SharedPreferrences, 其采用了Map数据结构来存储数据,以键值的方式存储,可以简单的读取与写入,下面通过实例代码给大家讲解下,需要的朋友参考下吧
收藏 0 赞 0 分享
查看更多