Android 가 모든 저장 장치 위 치 를 얻 는 가장 좋 은 방법
@hide 의 방법 을 몇 개 호출 했 기 때문에 반 사 를 사 용 했 습 니 다.
구체 적 인 코드 는 다음 과 같다.
public static List<HomeDirBean> getAllExternalStorage(Context context) {
List<HomeDirBean> storagePath = new ArrayList<>();
StorageManager storageManager = (StorageManager) context.getSystemService(STORAGE_SERVICE);
StorageVolume[] storageVolumes;
try {
Method getVolumeList = StorageManager.class.getDeclaredMethod("getVolumeList");
storageVolumes = (StorageVolume[]) getVolumeList.invoke(storageManager);
Method getVolumeState = StorageManager.class.getDeclaredMethod("getVolumeState", String.class);
for (StorageVolume storageVolume : storageVolumes) {
String desc = storageVolume.getDescription(context);
Log.i(TAG, "storageVolume name--->" + desc);
Method getPath = StorageVolume.class.getMethod("getPath");
String path = (String) getPath.invoke(storageVolume);
Log.i(TAG, "StoragePath--->" + path);
// StorageManager getVolumeState , StorageVolume getState ,
String state = (String) getVolumeState.invoke(storageManager, path);
Log.i(TAG, "storageVolume State--->" + state);
if (Environment.MEDIA_MOUNTED.equals(state)) {
HomeDirBean bean = new HomeDirBean(path, desc);
storagePath.add(bean);
}
}
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
return storagePath;
}
여기 서 주의해 야 할 것 은 동료 들 이 StorageVolume 류 에 getState 방법 이 있 는데 왜 StorageManager 로 getVolume State 방법 을 반사 적 으로 호출 하고 path 주 소 를 입력 하 느 냐 고 물 을 수 있 습 니 다.소스 코드 에서 StorageManager 의 getVolume State 방법 을 실현 하 는 것 도 path 를 StorageVolume 류 로 다시 만 든 다음 에 getState 방법 을 호출 하 는 것 입 니 다.우리 가 이렇게 하 는 것 은 쓸데없는 짓 이 아 닙 니까?원본 캡 처 는 다음 과 같 습 니 다.
답 은 당연히 아니 지,그렇지 않 으 면 나 도 성능 을 포기 하고 그 방법 을 반사 하 는 것 을 포기 하지 않 을 것 이다.주요 원인 은@hide 의 이 방법 에서 mountPoint 가 StorageVolume 으로 다시 포장 되 었 을 때 시스템 이 만 든 StorageVolume 인 스 턴 스 에 해당 하 며 모든 방법 을 자 연 스 럽 게 수행 할 수 있 기 때 문 입 니 다.만약 에 직접 호출 을 사용 하면 포장 되 었 을 때 많은 방법 이 숨겨 집 니 다.예 를 들 어 이 getState 방법 은 이 때 응용 이 잘못 되 고 이 방법 을 찾 을 수 없습니다.
먼저 여기까지 간단하게 쓰 고 나중에 보충 이 있 으 면 추가 합 니 다.
이상 의 안 드 로 이 드 가 모든 저장 장치 의 위 치 를 얻 는 가장 좋 은 방법 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 에 게 참고 가 되 고 저희 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.