在写文件管理系统时会用到各种打开不同格式的文件的需求,由于Android系统默认内置了一些可以打开的系统应用,但还是不能满足需求,比如打开视频文件、word等,需要安装相应的播放软件才可以使用,这时程序会通过Intent查找可以使用的软件
实现通过代码打开一个文件需要2部分,一部分是要获取到不同文件的后缀,以便根据需求匹配相应的Intent,另一个就是不同格式的文件打开的Intent不同
1、在values目录下定义后缀数组文件fileendings
01
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
04
<
array
name
=
"fileEndingImage"
>
11
<
array
name
=
"fileEndingAudio"
>
17
<
array
name
=
"fileEndingVideo"
>
23
<
array
name
=
"fileEndingPackage"
>
31
<
array
name
=
"fileEndingWebText"
>
37
<
array
name
=
"fileEndingText"
>
47
<
array
name
=
"fileEndingWord"
>
51
<
array
name
=
"fileEndingExcel"
>
55
<
array
name
=
"fileEndingPPT"
>
59
<
array
name
=
"fileEndingPdf"
>
2、定义OpenFiles工具类,只需传输File参数即可,然后通过返回的Intent打开文件
001
public
class
OpenFiles {
003
public
static
Intent getHtmlFileIntent(File file)
005
Uri uri = Uri.parse(file.toString()).buildUpon().encodedAuthority(
"com.android.htmlfileprovider"
).scheme(
"content"
).encodedPath(file.toString()).build();
006
Intent intent =
new
Intent(
"android.intent.action.VIEW"
);
007
intent.setDataAndType(uri,
"text/html"
);
011
public
static
Intent getImageFileIntent(File file)
013
Intent intent =
new
Intent(
"android.intent.action.VIEW"
);
014
intent.addCategory(
"android.intent.category.DEFAULT"
);
015
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
016
Uri uri = Uri.fromFile(file);
017
intent.setDataAndType(uri,
"image/*"
);
021
public
static
Intent getPdfFileIntent(File file)
023
Intent intent =
new
Intent(
"android.intent.action.VIEW"
);
024
intent.addCategory(
"android.intent.category.DEFAULT"
);
025
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
026
Uri uri = Uri.fromFile(file);
027
intent.setDataAndType(uri,
"application/pdf"
);
031
public
static
Intent getTextFileIntent(File file)
033
Intent intent =
new
Intent(
"android.intent.action.VIEW"
);
034
intent.addCategory(
"android.intent.category.DEFAULT"
);
035
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
036
Uri uri = Uri.fromFile(file);
037
intent.setDataAndType(uri,
"text/plain"
);
042
public
static
Intent getAudioFileIntent(File file)
044
Intent intent =
new
Intent(
"android.intent.action.VIEW"
);
045
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
046
intent.putExtra(
"oneshot"
,
0
);
047
intent.putExtra(
"configchange"
,
0
);
048
Uri uri = Uri.fromFile(file);
049
intent.setDataAndType(uri,
"audio/*"
);
053
public
static
Intent getVideoFileIntent(File file)
055
Intent intent =
new
Intent(
"android.intent.action.VIEW"
);
056
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
057
intent.putExtra(
"oneshot"
,
0
);
058
intent.putExtra(
"configchange"
,
0
);
059
Uri uri = Uri.fromFile(file);
060
intent.setDataAndType(uri,
"video/*"
);
066
public
static
Intent getChmFileIntent(File file)
068
Intent intent =
new
Intent(
"android.intent.action.VIEW"
);
069
intent.addCategory(
"android.intent.category.DEFAULT"
);
070
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
071
Uri uri = Uri.fromFile(file);
072
intent.setDataAndType(uri,
"application/x-chm"
);
078
public
static
Intent getWordFileIntent(File file)
080
Intent intent =
new
Intent(
"android.intent.action.VIEW"
);
081
intent.addCategory(
"android.intent.category.DEFAULT"
);
082
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
083
Uri uri = Uri.fromFile(file);
084
intent.setDataAndType(uri,
"application/msword"
);
088
public
static
Intent getExcelFileIntent(File file)
090
Intent intent =
new
Intent(
"android.intent.action.VIEW"
);
091
intent.addCategory(
"android.intent.category.DEFAULT"
);
092
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
093
Uri uri = Uri.fromFile(file);
094
intent.setDataAndType(uri,
"application/vnd.ms-excel"
);
098
public
static
Intent getPPTFileIntent(File file)
100
Intent intent =
new
Intent(
"android.intent.action.VIEW"
);
101
intent.addCategory(
"android.intent.category.DEFAULT"
);
102
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
103
Uri uri = Uri.fromFile(file);
104
intent.setDataAndType(uri,
"application/vnd.ms-powerpoint"
);
108
public
static
Intent getApkFileIntent(File file)
110
Intent intent =
new
Intent();
111
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
112
intent.setAction(android.content.Intent.ACTION_VIEW);
113
intent.setDataAndType(Uri.fromFile(file),
"application/vnd.android.package-archive"
);
3、定义用于检查要打开的文件的后缀是否在遍历后缀数组中
1
private
boolean
checkEndsWithInStringArray(String checkItsEnd,
3
for
(String aEnd : fileEndings){
4
if
(checkItsEnd.endsWith(aEnd))
4、通过调用OpenFiles类返回的Intent,打开相应的文件
01
if
(currentPath!=
null
&¤tPath.isFile())
03
String fileName = currentPath.toString();
05
if
(checkEndsWithInStringArray(fileName, getResources().
06
getStringArray(R.array.fileEndingImage))){
07
intent = OpenFiles.getImageFileIntent(currentPath);
08
startActivity(intent);
09
}
else
if
(checkEndsWithInStringArray(fileName, getResources().
10
getStringArray(R.array.fileEndingWebText))){
11
intent = OpenFiles.getHtmlFileIntent(currentPath);
12
startActivity(intent);
13
}
else
if
(checkEndsWithInStringArray(fileName, getResources().
14
getStringArray(R.array.fileEndingPackage))){
15
intent = OpenFiles.getApkFileIntent(currentPath);
16
startActivity(intent);
18
}
else
if
(checkEndsWithInStringArray(fileName, getResources().
19
getStringArray(R.array.fileEndingAudio))){
20
intent = OpenFiles.getAudioFileIntent(currentPath);
21
startActivity(intent);
22
}
else
if
(checkEndsWithInStringArray(fileName, getResources().
23
getStringArray(R.array.fileEndingVideo))){
24
intent = OpenFiles.getVideoFileIntent(currentPath);
25
startActivity(intent);
26
}
else
if
(checkEndsWithInStringArray(fileName, getResources().
27
getStringArray(R.array.fileEndingText))){
28
intent = OpenFiles.getTextFileIntent(currentPath);
29
startActivity(intent);
30
}
else
if
(checkEndsWithInStringArray(fileName, getResources().
31
getStringArray(R.array.fileEndingPdf))){
32
intent = OpenFiles.getPdfFileIntent(currentPath);
33
startActivity(intent);
34
}
else
if
(checkEndsWithInStringArray(fileName, getResources().
35
getStringArray(R.array.fileEndingWord))){
36
intent = OpenFiles.getWordFileIntent(currentPath);
37
startActivity(intent);
38
}
else
if
(checkEndsWithInStringArray(fileName, getResources().
39
getStringArray(R.array.fileEndingExcel))){
40
intent = OpenFiles.getExcelFileIntent(currentPath);
41
startActivity(intent);
42
}
else
if
(checkEndsWithInStringArray(fileName, getResources().
43
getStringArray(R.array.fileEndingPPT))){
44
intent = OpenFiles.getPPTFileIntent(currentPath);
45
startActivity(intent);
48
showMessage(
"无法打开,请安装相应的软件!"
);
52
showMessage(
"对不起,这不是文件!"
);