일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- apk변환
- retrieveExplicitStyle
- 안드로이드 로그캣
- Android Bluetooth
- 고유식별자
- Android10
- 안드로이드 디버깅툴
- targetSDK29
- svn체크아웃
- Opacity Hex
- 안드로이드
- 앱강종현상
- 안드로이드aab변환
- target29
- lottieAnimation
- Android OS 10
- Android
- 안드로이드apk변환
- 로띠애니메이션
- bottomNavigation animation
- 로그캣 색상변경
- 디바이스ID
- BottomNavigation
- 투명도 hex값
- 앱강종
- 바텀네비
- 로그캣 색상지정
- aab파일apk변환
- Bluetooth 스캔
- 바텀네비게이션
Archives
- Today
- Total
공부하는 다락방
외장 SD카드 Path 가져오기 본문
6.0(마시멜로우), 7.0(누가) 버전에서 SD카드 경로 가져오는 방식이 달라졌다.
storage/숫자/Android/data/....
이런식으로 구성 되어있는데 숫자에 들어갈 값은 sd카드 바인딩 할 때 생성되는 볼륨ID 어쩌고.. 이렇다더라..
그래서 경로를 가져오려고 할 때 정규표현식으로 가져와야하는 방식으로 바꿔야 한다고 한다.
/* returns external storage paths (directory of external memory card) as array of Strings */
public String[] getExternalStorageDirectories() {
List<String> results = new ArrayList<>();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //Method 1 for KitKat & above
File[] externalDirs = getExternalFilesDirs(null);
for (File file : externalDirs) {
String path = file.getPath().split("/Android")[0];
boolean addPath = false;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
addPath = Environment.isExternalStorageRemovable(file);
}
else{
addPath = Environment.MEDIA_MOUNTED.equals(EnvironmentCompat.getStorageState(file));
}
if(addPath){
results.add(path);
}
}
}
if(results.isEmpty()) { //Method 2 for all versions
// better variation of: http://stackoverflow.com/a/40123073/5002496
String output = "";
try {
final Process process = new ProcessBuilder().command("mount | grep /dev/block/vold")
.redirectErrorStream(true).start();
process.waitFor();
final InputStream is = process.getInputStream();
final byte[] buffer = new byte[1024];
while (is.read(buffer) != -1) {
output = output + new String(buffer);
}
is.close();
} catch (final Exception e) {
e.printStackTrace();
}
if(!output.trim().isEmpty()) {
String devicePoints[] = output.split("\n");
for(String voldPoint: devicePoints) {
results.add(voldPoint.split(" ")[2]);
}
}
}
//Below few lines is to remove paths which may not be external memory card, like OTG (feel free to comment them out)
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
for (int i = 0; i < results.size(); i++) {
if (!results.get(i).toLowerCase().matches(".*[0-9a-f]{4}[-][0-9a-f]{4}")) {
Log.d(LOG_TAG, results.get(i) + " might not be extSDcard");
results.remove(i--);
}
}
} else {
for (int i = 0; i < results.size(); i++) {
if (!results.get(i).toLowerCase().contains("ext") && !results.get(i).toLowerCase().contains("sdcard")) {
Log.d(LOG_TAG, results.get(i)+" might not be extSDcard");
results.remove(i--);
}
}
}
String[] storageDirectories = new String[results.size()];
for(int i=0; i<results.size(); ++i) storageDirectories[i] = results.get(i);
return storageDirectories;
}
출처 : http://stackoverflow.com/questions/36766016/how-to-get-sd-card-path-in-android6-0-programmatically
'Android' 카테고리의 다른 글
.aab to .apk 변환 (0) | 2020.03.09 |
---|---|
알림채널(Notification Channel) (0) | 2018.09.07 |
안드로이드 디버깅 플랫폼 (0) | 2017.04.07 |
URL XML 파싱 방법 (0) | 2017.03.08 |
[안드로이드 스튜디오]로그캣(logcat) 색깔 바꾸기 (0) | 2017.01.05 |
Comments