自从android4.0开始,谷歌为没有内存卡的手机模拟了一个SD卡,占用了原来的SD卡路径,并为真实的sd卡挂载到该目录的子目录或者其他目录.由于所挂载的目录并没有官方规范.
[1].[代码] 跳至 [1] [2] [3]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
public
class
StorageList {
private
Activity mActivity;
private
StorageManager mStorageManager;
private
Method mMethodGetPaths;
/**
* total space
*/
public
static
final
int
TOTALSPACE =
0
;
/**
* free space
*/
public
static
final
int
FREESPACE =
1
;
public
StorageList(Activity activity) {
mActivity = activity;
if
(mActivity !=
null
) {
mStorageManager = (StorageManager) mActivity
.getSystemService(Activity.STORAGE_SERVICE);
try
{
mMethodGetPaths = mStorageManager.getClass().getMethod(
"getVolumePaths"
);
}
catch
(NoSuchMethodException e) {
e.printStackTrace();
}
}
}
public
String[] getVolumePathsFor14() {
String[] paths =
null
;
try
{
paths = (String[]) mMethodGetPaths.invoke(mStorageManager);
}
catch
(IllegalArgumentException e) {
}
catch
(IllegalAccessException e) {
}
catch
(InvocationTargetException e) {
}
catch
(Exception e) {
}
return
paths;
}
public
String[] getVolumePaths() {
if
(android.os.Build.VERSION.SDK_INT >=
14
) {
return
getVolumePathsFor14();
}
else
if
(Environment.MEDIA_MOUNTED.equals(Environment
.getExternalStorageState())) {
return
new
String[] { Environment.getExternalStorageDirectory()
.getAbsolutePath() };
}
return
null
;
}
/**
* @param type, see {@link #TOTALSPACE}, or {@link #TOTALSPACE}.
* @return
*/
public
String getBestVolumePaths(
int
type) {
String[] vps = getVolumePaths();
if
(vps ==
null
)
return
null
;
if
(vps.length ==
1
)
return
vps[
0
];
File file =
new
File(vps[
0
]);
if
(type == TOTALSPACE) {
for
(
int
i =
1
; i < vps.length; i++) {
File file2 =
new
File(vps[i]);
if
(file2.getTotalSpace() > file.getTotalSpace())
file = file2;
}
}
else
if
(type == FREESPACE) {
for
(
int
i =
1
; i < vps.length; i++) {
File file2 =
new
File(vps[i]);
if
(file2.getFreeSpace() > file.getFreeSpace())
file = file2;
}
}
return
file.getAbsolutePath();
}
}
|
[2].[代码] 跳至 [1] [2] [3]
1
2
3
4
5
6
7
8
9
10
|
void
testSD() {
textView.setText(
""
);
StorageList storageList =
new
StorageList(
this
);
String[] strings = storageList.getVolumePaths();
if
(strings !=
null
) {
for
(
int
i =
0
; i < strings.length; i++) {
textView.append(strings[i] +
"\n"
);
}
}
else
{
}
|