2016-12-13 3 views
0

내 음악 앱의 오디오 파일 목록을 얻으려면 android MediaStore을 사용하고 있습니다.이 파일들을 재생 목록에 추가 할 수 있습니다. 파일이 장치 메모리에서 삭제되면 파일 정보를 재생 목록에서 삭제해야합니다.Android : 삭제 된 오디오 파일 듣기

오디오 파일을 장치 내부/외부 메모리에서 삭제할 때 청취 할 수신기/수신기가 있습니까?

파일 변경시 FileObserver을 사용할 수 있습니다. 그러나 이것은 항상 실행되고 변경된 파일을 청취하기위한 백그라운드 서비스가 필요했습니다. 나는 이것을 위해 봉사하는 것을 피하고 싶다. 다른 방법이 있습니까?

+0

나는 내 애플 리케이션 중 하나에서 아주 비슷한 것을 구현했다. 나는 그것이 당신이 원하는 것인지 모른다. 기본적으로 목록의 모든 시작 부분에 노래를 다시로드하고 재생 목록, 대기열 등을 반복하고 더 이상 목록에없는 노래를 찾아서 제거합니다. 나는 가장 좋은 해결책이 아니라는 것을 알고 있지만 나를 위해 일했다. 왜냐하면 평균 장치에있는 노래의 수가 아주 적기 때문에 재 장전해도 성능에 많은 영향을 미치지 않기 때문이다. –

+0

@ HarjotSinghOberai- 감사합니다. 나는 비슷한 접근법을 가졌지 만, 주로 모든 노래가 대기열/재생 목록에있는 경우 앱 시작 속도가 느려집니다. – Libin

+0

나는 내 마음 속에 또 다른 접근법을 가졌지 만 구현하지 않았다. 앱 시작시 아무 것도하지 말고 노래가 재생 될 때마다 MediaPlayer에서 데이터 소스를 설정하기 전에 경로를 확인하십시오. 경로가 없으면 노래가 삭제되어 다음 노래로 건너 뛰고 백그라운드에서 노래가 재생 목록 또는 목록에있는 다른 장소에서 삭제된다는 것을 알고 있습니다. –

답변

1

MediaScanner 이벤트 용 BroadcastReceiver를 등록하고 Intent.ACTION_MEDIA_SCANNER_FINISHED 의도를 수신 할 때마다 목록을 새로 고칠 수 있습니다. 당신이 받아야하므로

IntentFilter scanFileReceiverFilter= new IntentFilter(); 
scanFileReceiverFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED); 
scanFileReceiverFilter.addDataScheme("file"); 

BroadcastReceiver scanFileReceiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 

      if(intent.getAction().equals(Intent.ACTION_MEDIA_SCANNER_FINISHED)) { 
       Uri uri = intent.getData(); 
       String path = null; 
       if (uri != null) { 
        path = uri.getPath(); 
       } 
       //TODO:refresh list in path 

      } 
     } 
    }; 
getActivity().registerReceiver(scanFileReceiver, scanFileReceiverFilter); 

변경 후 미디어 스캐너를 실행 할 것으로 예상된다 로컬 데이터를 삭제되는 모든 응용 프로그램, 미디어 DB를 동기화합니다.

그러나 이것은 응용 프로그램이 실행되는 동안에 만 작동합니다. 백그라운드를 삭제하려면 매니페스트에 등록해야합니다.

DB를 사용하여 재생 목록 항목을 저장하는 경우 새로 고침을 위해 수신 된 LIKE 경로 경로가있는 모든 파일을 확인할 수 있으므로 효율적입니다.

기기에 엄청난 양의 콘텐츠가있어이 이벤트가 늦게 수신되는 경우가 있습니다.

uri MediaStore.Audio.Media.getContentUri ("external")와 함께 registerContentObserver를 호출하는 ContentObserver를 사용할 수도 있습니다. 모든 미디어 공급자는 오디오보기가 있으므로 효율적으로 작동해야합니다.