1

처음 게시 할 때 여기에 올 때가되었습니다. SD 카드가 장치에서 제거 된 것을 감지하려고하는데 내 브로드 캐스트 수신기가 이전 ICS 태블릿에서 제대로 작동하지만 (MEDIA_UNMOUNTED, BAD_REMOVAL 등의 의도 된 동작을 얻을 수 있음) 다른 태블릿에서는 android 4.2 아무것도 내가 SD 카드를 제거 할 때, 다음과 같은 의도의 행동 중 어느 것도 방송되지 발생하지 :SD 카드 제거 의도가 작동하지 않습니다.

  • MEDIA_BAD_REMOVAL

  • MEDIA_EJECT

  • MEDIA_REMOVED

  • MEDIA_UNMOUNTED

나는 여기 만이 1 개 관련 질문을 발견하지만,이 솔루션은 이미 시도 dataScheme "파일"을 추가했다. 당신은 그런 이름으로 BroadcastSDCard의 .class를 새로운 클래스를 생성이

<application> 
<receiver android:name=".BroadcastSDCard"> 
    <intent-filter> 
    <action android:name="android.intent.action.MEDIA_UNMOUNTED" /> 
    <action android:name="android.intent.action.MEDIA_REMOVED" /> 
    <action android:name="android.intent.action.MEDIA_EJECT" /> 
    <action android:name="android.intent.action.MEDIA_BAD_REMOVAL" /> 
    <data android:scheme="file" /> 
    </intent-filter> 
</receiver> 
</application> 

같은 매니페스트에서 BroadcastReceiver을 등록하고 그 중 하나를 사용해야합니다

private BroadcastReceiver deviceCardsBroadcastReceiver; 
    private IntentFilter sdCardIntentFilter; 

    sdCardIntentFilter = new IntentFilter(); 
    sdCardIntentFilter.addAction(MEDIA_REMOVED); 
    sdCardIntentFilter.addAction(MEDIA_UNMOUNTED); 
    sdCardIntentFilter.addAction(MEDIA_BAD_REMOVAL); 
    sdCardIntentFilter.addAction(MEDIA_EJECT); 
    sdCardIntentFilter.addDataScheme("file"); 

    registerReceiver(deviceCardsBroadcastReceiver, sdCardIntentFilter); 

    deviceCardsBroadcastReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 

       switch (intent.getAction()) { 

        case MEDIA_BAD_REMOVAL: 
        case MEDIA_EJECT: 
        case MEDIA_REMOVED: 
        case MEDIA_UNMOUNTED: 
         Log.i("SD CARD REMOVED"); 
         break; 
        default: 
         break; 
       } 
      } 
    }; 
+0

매니페스트는 어떻게 보이나요? –

+0

나는 모든 것을 programmaticaly하고 있었기 때문에 manifest에 아무 것도 추가하지 않았고, 이전 4.0 태블릿에서 작동하는 것으로 보인다. 나는 거기에서도 뭔가해야합니까? –

+0

네, 매니 페스트에 'BroadcastReceiver'를 등록해야합니다. 나는 1 초를 대답 할 것이다. –

답변

0

: 여기 내 코드입니다.

public class BroadcastSDCard extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // do your stuff 
    } 
} 

당신은 여전히 ​​

private BroadcastSDCard deviceCardsBroadcastReceiver; 
private IntentFilter sdCardIntentFilter; 

deviceCardsBroadcastReceiver = new BroadcastSDCard(); 
sdCardIntentFilter = new IntentFilter(); 
sdCardIntentFilter.addAction(MEDIA_REMOVED); 
sdCardIntentFilter.addAction(MEDIA_UNMOUNTED); 
sdCardIntentFilter.addAction(MEDIA_BAD_REMOVAL); 
sdCardIntentFilter.addAction(MEDIA_EJECT); 
sdCardIntentFilter.addDataScheme("file"); 

registerReceiver(deviceCardsBroadcastReceiver, sdCardIntentFilter); 

은 또한 당신의 onDestroy() 방법에의 등록을 취소하는 것을 잊지 마세요 기존의 코드를 사용하거나 누수를 얻을 것이다.

@Override 
    public void onDestroy() { 
     super.onDestroy(); 
     if (deviceCardsBroadcastReceiver!= null) 
      unregisterReceiver(updateBroadcast); 
    } 
+0

시험해 보겠습니다. –

+0

@NikolasManuelides 이것은 새로운 수업입니다. 새로운 수업을 만드십시오. –

+0

예, 잘 읽지 못했습니다. 다시 시도하고 다시 신고 해 드리겠습니다. 감사합니다. –