1

第一次發佈這裏我希望我做對了。我試圖檢測SD卡何時從設備上移除,我的廣播接收器可以在舊ICS平板電腦上正常工作(我可以獲得MEDIA_UNMOUNTED,BAD_REMOVAL等意圖操作),但在另一臺平板電腦上使用android 4.2沒有任何反應,當我取出SD卡,沒有任何意圖如下動作被廣播:SD卡移除意圖不起作用

  • MEDIA_BAD_REMOVAL

  • MEDIA_EJECT

  • MEDIA_REMOVED

  • MEDIA_UNMOUNTED

我只找到1個相關問題這在這裏,但溶液加入,我已經嘗試過dataScheme「文件」。這裏是我的代碼:

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,並且它似乎在舊4.0平板電腦中工作。我應該做些什麼嗎? –

+0

是的,您必須在清單中註冊'BroadcastReceiver'。我會回答一秒。 –

回答

0

你必須註冊在清單中BroadcastReceiver這樣

<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> 

然後創建一個新的類名爲BroadcastSDCard的.class和使用的那一個。

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

是的,我沒有讀得好,會嘗試並報告回來,謝謝。 –