Android 가 모든 저장 장치 위 치 를 얻 는 가장 좋 은 방법

2601 단어 Android기억설비.
이 방식 은 내부 저장 장치 주소,SD 카드 주소,USB 장치 주 소 를 얻 을 수 있 고 호환성 이 99%에 달 합 니 다.
@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 방법 은 이 때 응용 이 잘못 되 고 이 방법 을 찾 을 수 없습니다.
먼저 여기까지 간단하게 쓰 고 나중에 보충 이 있 으 면 추가 합 니 다.
이상 의 안 드 로 이 드 가 모든 저장 장치 의 위 치 를 얻 는 가장 좋 은 방법 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 에 게 참고 가 되 고 저희 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기