Android编程开发之打开文件的Intent及使用方法
本文实例讲述了Android编程开发之打开文件的Intent及使用方法。分享给大家供大家参考,具体如下:
在写文件管理系统时会用到各种打开不同格式的文件的需求,由于Android系统默认内置了一些可以打开的系统应用,但还是不能满足需求,比如打开视频文件、word等,需要安装相应的播放软件才可以使用,这时程序会通过Intent查找可以使用的软件实现通过代码打开一个文件需要2部分,一部分是要获取到不同文件的后缀,以便根据需求匹配相应的Intent,另一个就是不同格式的文件打开的Intent不同
1、在values目录下定义后缀数组文件fileendings
<?xmlversion="1.0"encoding="utf-8"?> <resources> <arrayname="fileEndingImage"> <item>.png</item> <item>.gif</item> <item>.jpg</item> <item>.jpeg</item> <item>.bmp</item> </array> <arrayname="fileEndingAudio"> <item>.mp3</item> <item>.wav</item> <item>.ogg</item> <item>.midi</item> </array> <arrayname="fileEndingVideo"> <item>.mp4</item> <item>.rmvb</item> <item>.avi</item> <item>.flv</item> </array> <arrayname="fileEndingPackage"> <item>.jar</item> <item>.zip</item> <item>.rar</item> <item>.gz</item> <item>.apk</item> <item>.img</item> </array> <arrayname="fileEndingWebText"> <item>.htm</item> <item>.html</item> <item>.php</item> <item>.jsp</item> </array> <arrayname="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> <arrayname="fileEndingWord"> <item>.doc</item> <item>.docx</item> </array> <arrayname="fileEndingExcel"> <item>.xls</item> <item>.xlsx</item> </array> <arrayname="fileEndingPPT"> <item>.ppt</item> <item>.pptx</item> </array> <arrayname="fileEndingPdf"> <item>.p<?xmlversion="1.0"encoding="utf-8"?> <resources> <arrayname="fileEndingImage"> <item>.png</item> <item>.gif</item> <item>.jpg</item> <item>.jpeg</item> <item>.bmp</item> </array> <arrayname="fileEndingAudio"> <item>.mp3</item> <item>.wav</item> <item>.ogg</item> <item>.midi</item> </array> <arrayname="fileEndingVideo"> <item>.mp4</item> <item>.rmvb</item> <item>.avi</item> <item>.flv</item> </array> <arrayname="fileEndingPackage"> <item>.jar</item> <item>.zip</item> <item>.rar</item> <item>.gz</item> <item>.apk</item> <item>.img</item> </array> <arrayname="fileEndingWebText"> <item>.htm</item> <item>.html</item> <item>.php</item> <item>.jsp</item> </array> <arrayname="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> <arrayname="fileEndingWord"> <item>.doc</item> <item>.docx</item> </array> <arrayname="fileEndingExcel"> <item>.xls</item> <item>.xlsx</item> </array> <arrayname="fileEndingPPT"> <item>.ppt</item> <item>.pptx</item> </array> <arrayname="fileEndingPdf"> <item>.pdf</item> </array> </resources>df</item> </array> </resources>
2、定义OpenFiles工具类,只需传输File参数即可,然后通过返回的Intent打开文件
publicclassOpenFiles{
//android获取一个用于打开HTML文件的intent
publicstaticIntentgetHtmlFileIntent(Filefile)
{
Uriuri=Uri.parse(file.toString()).buildUpon().encodedAuthority("com.android.htmlfileprovider").scheme("content").encodedPath(file.toString()).build();
Intentintent=newIntent("android.intent.action.VIEW");
intent.setDataAndType(uri,"text/html");
returnintent;
}
//android获取一个用于打开图片文件的intent
publicstaticIntentgetImageFileIntent(Filefile)
{
Intentintent=newIntent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uriuri=Uri.fromFile(file);
intent.setDataAndType(uri,"image/*");
returnintent;
}
//android获取一个用于打开PDF文件的intent
publicstaticIntentgetPdfFileIntent(Filefile)
{
Intentintent=newIntent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uriuri=Uri.fromFile(file);
intent.setDataAndType(uri,"application/pdf");
returnintent;
}
//android获取一个用于打开文本文件的intent
publicstaticIntentgetTextFileIntent(Filefile)
{
Intentintent=newIntent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uriuri=Uri.fromFile(file);
intent.setDataAndType(uri,"text/plain");
returnintent;
}
//android获取一个用于打开音频文件的intent
publicstaticIntentgetAudioFileIntent(Filefile)
{
Intentintent=newIntent("android.intent.action.VIEW");
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("oneshot",0);
intent.putExtra("configchange",0);
Uriuri=Uri.fromFile(file);
intent.setDataAndType(uri,"audio/*");
returnintent;
}
//android获取一个用于打开视频文件的intent
publicstaticIntentgetVideoFileIntent(Filefile)
{
Intentintent=newIntent("android.intent.action.VIEW");
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("oneshot",0);
intent.putExtra("configchange",0);
Uriuri=Uri.fromFile(file);
intent.setDataAndType(uri,"video/*");
returnintent;
}
//android获取一个用于打开CHM文件的intent
publicstaticIntentgetChmFileIntent(Filefile)
{
Intentintent=newIntent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uriuri=Uri.fromFile(file);
intent.setDataAndType(uri,"application/x-chm");
returnintent;
}
//android获取一个用于打开Word文件的intent
publicstaticIntentgetWordFileIntent(Filefile)
{
Intentintent=newIntent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uriuri=Uri.fromFile(file);
intent.setDataAndType(uri,"application/msword");
returnintent;
}
//android获取一个用于打开Excel文件的intent
publicstaticIntentgetExcelFileIntent(Filefile)
{
Intentintent=newIntent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uriuri=Uri.fromFile(file);
intent.setDataAndType(uri,"application/vnd.ms-excel");
returnintent;
}
//android获取一个用于打开PPT文件的intent
publicstaticIntentgetPPTFileIntent(Filefile)
{
Intentintent=newIntent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uriuri=Uri.fromFile(file);
intent.setDataAndType(uri,"application/vnd.ms-powerpoint");
returnintent;
}
//android获取一个用于打开apk文件的intent
publicstaticIntentgetApkFileIntent(Filefile)
{
Intentintent=newIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
returnintent;
}
}
3、定义用于检查要打开的文件的后缀是否在遍历后缀数组中
privatebooleancheckEndsWithInStringArray(StringcheckItsEnd,
String[]fileEndings){
for(StringaEnd:fileEndings){
if(checkItsEnd.endsWith(aEnd))
returntrue;
}
returnfalse;
}
4、通过调用OpenFiles类返回的Intent,打开相应的文件
if(currentPath!=null&¤tPath.isFile())
{
StringfileName=currentPath.toString();
Intentintent;
if(checkEndsWithInStringArray(fileName,getResources().
getStringArray(R.array.fileEndingImage))){
intent=OpenFiles.getImageFileIntent(currentPath);
startActivity(intent);
}elseif(checkEndsWithInStringArray(fileName,getResources().
getStringArray(R.array.fileEndingWebText))){
intent=OpenFiles.getHtmlFileIntent(currentPath);
startActivity(intent);
}elseif(checkEndsWithInStringArray(fileName,getResources().
getStringArray(R.array.fileEndingPackage))){
intent=OpenFiles.getApkFileIntent(currentPath);
startActivity(intent);
}elseif(checkEndsWithInStringArray(fileName,getResources().
getStringArray(R.array.fileEndingAudio))){
intent=OpenFiles.getAudioFileIntent(currentPath);
startActivity(intent);
}elseif(checkEndsWithInStringArray(fileName,getResources().
getStringArray(R.array.fileEndingVideo))){
intent=OpenFiles.getVideoFileIntent(currentPath);
startActivity(intent);
}elseif(checkEndsWithInStringArray(fileName,getResources().
getStringArray(R.array.fileEndingText))){
intent=OpenFiles.getTextFileIntent(currentPath);
startActivity(intent);
}elseif(checkEndsWithInStringArray(fileName,getResources().
getStringArray(R.array.fileEndingPdf))){
intent=OpenFiles.getPdfFileIntent(currentPath);
startActivity(intent);
}elseif(checkEndsWithInStringArray(fileName,getResources().
getStringArray(R.array.fileEndingWord))){
intent=OpenFiles.getWordFileIntent(currentPath);
startActivity(intent);
}elseif(checkEndsWithInStringArray(fileName,getResources().
getStringArray(R.array.fileEndingExcel))){
intent=OpenFiles.getExcelFileIntent(currentPath);
startActivity(intent);
}elseif(checkEndsWithInStringArray(fileName,getResources().
getStringArray(R.array.fileEndingPPT))){
intent=OpenFiles.getPPTFileIntent(currentPath);
startActivity(intent);
}else
{
showMessage("无法打开,请安装相应的软件!");
}
}else
{
showMessage("对不起,这不是文件!");
}
希望本文所述对大家Android程序设计有所帮助。
