1

初めてここに投稿働いていない私は、私は右のそれを行う願っています。私はSDカードをデバイスから削除されたときを検出しようとしている、私の放送受信機は、古いICSタブレット上で正常に動作しますアンドロイドでなく、他のタブレットでは(私はMEDIA_UNMOUNTED、BAD_REMOVALなど、目的のアクションを取得することができますよ) 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

私はプログラム的にすべてをやっていたので、マニフェストには何も追加していませんでした。それは古い4.0タブレットで動作するようです。私もそこで何かすべきか? –

+0

はい、ブロードキャストレシーバをマニフェストに登録する必要があります。私は1秒に答えます。 –

答えて

0

あなたは次に名前で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を登録する必要があります。

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

はい、私はよく読まなかった、それを試み、報告してくれます、ありがとう。 –

関連する問題