-
[Storage] 외부저장소 볼륨 BroadcastReceiverAndroid/Storage 2021. 10. 26. 16:02
onReceive의 받은 인텐트에서
getData로 Uri를 뽑아 어떤 볼륨이 변경되었는지 체크가능
체크 getAction으로 볼륨이 어떻게 변경되었는지 체크가능
- <application>태그 내부에 implicit 브로드 캐스트 리시버 정의
<receiver android:name="com.source.file.sharedstoragedownloadfile.SdReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MEDIA_MOUNTED" /> <action android:name="android.intent.action.MEDIA_UNMOUNTED" /> <action android:name="android.intent.action.MEDIA_REMOVED" /> <action android:name="android.intent.action.MEDIA_BAD_REMOVAL" /> <action android:name="android.intent.action.MEDIA_CHECKING" /> <action android:name="android.intent.action.MEDIA_EJECT" /> <data android:scheme="file" /> </intent-filter> </receiver>
확인하고 싶은 Action만 정의하였다. 이외에도 여러 Action이 있다.
Intent의 data필드를 file로 꼭 지정해줘야 한다.
- BroadcastReceiver클래스를 상속한 클래스 생성 후 onReceive() 오버라이딩
class SdReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { log("SD카드 테스트- onReceive()") if (intent != null) { val action = intent.action if (action != null) { log(intent.data.toString()) //어떤 볼륨이 변경되었는지 log(action) //볼륨의 상태 } } } private fun log(str: String) { Log.d("EXTERNAL_STORAGE", str) } }
Intent의 data인 Uri로 어떤 위치가 변경되었는지 확인
Intent의 action으로 어떤 액션이 행해졌는지 확인
- 테스트
마운트 상태( SD카드가 연결된 상태)
언마운트 상태( SD카드는 꼽혀있지만 언마운트 시킨 상태)
분리된 상태( SD카드를 완전히 빼낸 경우 )
내 디바이스의 경우 usb 연결중 sd카드 분리가 안되는 디바이스여서 무선 디버깅
SD카드 설정에서 SD카드를 조작하고, 바늘로 SD카드 슬롯을 열어 SD카드를 분리시켜보자.
마운트 상태에서 언마운트 시킴
D: onReceive() D: file:///storage/4E60-1C3B D: android.intent.action.MEDIA_EJECT D: onReceive() D: file:///storage/4E60-1C3B D: android.intent.action.MEDIA_UNMOUNTED
언마운트 상태에서 마운트 시키거나, 분리된 상태에서 꼽음
D: SD카드 테스트- onReceive() D: file:///storage/4E60-1C3B D: android.intent.action.MEDIA_CHECKING D: SD카드 테스트- onReceive() D: file:///storage/4E60-1C3B D: android.intent.action.MEDIA_MOUNTED
언마운트하지 않고 강제 분리
D: SD카드 테스트- onReceive() D: file:///storage/4E60-1C3B D: android.intent.action.MEDIA_EJECT D: SD카드 테스트- onReceive() D: file:///storage/4E60-1C3B D: android.intent.action.MEDIA_UNMOUNTED D: SD카드 테스트- onReceive() D: file:///storage/4E60-1C3B D: android.intent.action.MEDIA_BAD_REMOVAL
제대로 언마운트하고 SD카드 분리
D: SD카드 테스트- onReceive() D: file:///storage/4E60-1C3B D: android.intent.action.MEDIA_UNMOUNTED D: SD카드 테스트- onReceive() D: file:///storage/4E60-1C3B D: android.intent.action.MEDIA_REMOVED D: SD카드 테스트- onReceive() D: file:///dev/null
MEDIA_REMOVED , MEDIA_BAD_REMOVAL은
볼륨을 제거 할때만 날라오는데 (바늘로 SD슬롯을 빼낼 경우)
언마운트를 잘 시키고 뽑으면 MEDIA_REMOVED
언마운트 안하고 강제로 뽑으면 MEDIA_BAD_REMOVAL
'Android > Storage' 카테고리의 다른 글
[Storage] 안드로이드 저장소 정리 (2) 2021.11.03 [Storage] Legacy Storage 외부저장소 다른 앱 개별공간에 저장 가능? (0) 2021.10.29 [Storage] Legacy Storage 외부저장소 공유공간에 파일쓰기 (0) 2021.10.29