在写文件管理系统时会用到各种打开不同格式的文件的需求,由于Android系统默认内置了一些可以打开的系统应用,但还是不能满足需求,比如打开视频文件、word等,需要安装相应的播放软件才可以使用,这时程序会通过Intent查找可以使用的软件实现通过代码打开一个文件需要2部分,一部分是要获取到不同文件的后缀,以便根据需求匹配相应的Intent,另一个就是不同格式的文件打开的Intent不同1、在values目录下定义后缀数组文件fileendings
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("对不起,这不是文件!");
-
}
复制代码
效果
|