展会信息港展会大全

Android杂谈--打开文件的Intent及使用
来源:互联网   发布日期:2016-01-14 09:34:38   浏览:1196次  

导读:在写文件管理系统时会用到各种打开不同格式的文件的需求,由于Android系统默认内置了一些可以打开的系统应用,但还是不能满足需求,比如打开视频文件、word等,需要安装相应的播放软件才可以使用...

在写文件管理系统时会用到各种打开不同格式的文件的需求,由于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>.pdf</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&&currentPath.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开发 教程

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港