2011-06-09 7 views
7

पर एसडी कार्ड से संबंधित इरादे नहीं मिल रहे हैं मैं एसडीकार्ड को हटाने के लिए एक रिसीवर पंजीकृत करने की कोशिश कर रहा हूं, लेकिन मेरे रिसीवर को यहां मेरे कोड को चिपकाने वाले एसडी कार्ड को हटाने पर बुलाया नहीं जा रहा है। मैं रिसीवर को ऑनस्टेट() में पंजीकृत कर रहा हूं और ऑनडस्ट्रॉय फ़ंक्शन में पंजीकरण नहीं कर रहा हूं। अगर मैं कोई गलती कर रहा हूं तो कृपया मुझे बताएं।मेरे प्रसारण रिसीवर

void registerSDCardStateChangeListener() { 
    final String MEDIA_REMOVED = "android.intent.action.MEDIA_REMOVED"; 
    final String MEDIA_UNMOUNTED = "android.intent.action.MEDIA_UNMOUNTED"; 
    final String MEDIA_BAD_REMOVAL = "android.intent.action.MEDIA_BAD_REMOVAL"; 
    //  final String MEDIA_EJECT = "android.intent.action.MEDIA_EJECT"; 
    final String MEDIA_EJECT = "android.intent.action.MEDIA_SCANNER_FINISHED"; 

    mSDCardStateChangeListener = new BroadcastReceiver() { 

     @ 
     Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      if (action.equalsIgnoreCase(MEDIA_REMOVED) || action.equalsIgnoreCase(MEDIA_UNMOUNTED) || action.equalsIgnoreCase(MEDIA_BAD_REMOVAL) || action.equalsIgnoreCase(MEDIA_EJECT)) { 
       if (mMediaPlayer != null) { 
        stopPlayBack(); 
       } 
      } 
     } 
    }; 

    IntentFilter filter = new IntentFilter(); 
    filter.addAction(MEDIA_REMOVED); 
    filter.addAction(MEDIA_UNMOUNTED); 
    filter.addAction(MEDIA_BAD_REMOVAL); 
    filter.addAction(MEDIA_EJECT); 
    registerReceiver(mSDCardStateChangeListener, filter); 
} 

कृपया मुझे बताएं कि मेरे कोड में कुछ भी गलत है या नहीं।

उत्तर

24

अपने इरादे फिल्टर

filter.addDataScheme("file"); 

को यह जोड़ने की कोशिश यह कार्य आप आशय का डेटा क्षेत्र के रूप में पथ भेजें पकड़ने की कोशिश कर रहे हैं प्रकट होता है। यदि ऐसा है, तो आपके इरादे फ़िल्टर में मिलान योजना होनी चाहिए।

अंत में, और यह केवल एक सुझाव है, लेकिन मैं आपको अपने कार्यों को मैन्युअल रूप से टाइप करने के बजाय इरादे वर्ग में स्थिरांक का उपयोग करने की सलाह दूंगा। आईई, सीधे स्ट्रिंग का उपयोग कर Intent.ACTION_MEDIA_REMOVED का उपयोग करें।

+0

आपको बहुत धन्यवाद, यह आपके उत्तर के लिए – Suman

+0

@Justin Breitfeller +1 काम किया। –

3

जस्टिन Breitfeller का जवाब मेरे लिए काम किया, लेकिन एक वैकल्पिक तकनीक के रूप में, आप भी यह पूरी तरह AndroidManifest.xml में कर सकते हैं:

public class OnMediaMountedReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     if(action.equalsIgnoreCase(Intent.ACTION_MEDIA_REMOVED) 
       || action.equalsIgnoreCase(Intent.ACTION_MEDIA_UNMOUNTED) 
       || action.equalsIgnoreCase(Intent.ACTION_MEDIA_BAD_REMOVAL) 
       || action.equalsIgnoreCase(Intent.ACTION_MEDIA_EJECT)) { 
      if(mMediaPlayer != null) { 
       stopPlayBack(); 
      } 
     }    
    } 
}; 
0
:

<receiver android:enabled="true" android:exported="false" 
    android:name="SDCardStateChangeListener"> 
    <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> 

तो रिसीवर एक उचित वर्ग बनाने

ऐप चल रहा है, जबकि मुझे समाधान मिल गया है और उपयोगकर्ता sdcard unmount/हटा दिया गया है।

@Override 
protected void onResume() { 
    super.onStart(); 

    IntentFilter ejectFilter = new ntentFilter(Intent.ACTION_MEDIA_MOUNTED); 
    ejectFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED); 
    ejectFilter.addAction(Intent.ACTION_MEDIA_EJECT); 
    ejectFilter.addDataScheme("file"); 
    registerReceiver(ejectReceiver, ejectFilter); 

} 

@Override 
protected void onPause() { 
    super.onPause(); 

    unregisterReceiver(ejectReceiver); 
} 

कक्षा में, नीचे की तरह विधि को परिभाषित,

BroadcastReceiver ejectReceiver = new BroadcastReceiver() 
{    
     @Override 
    public void onReceive(Context context, Intent intent) { 
     final String action = intent.getAction(); 

     if (action.equals(Intent.ACTION_MEDIA_EJECT) || action.equals(Intent.ACTION_MEDIA_UNMOUNTED)) 
     { 
      Log.e("msg","Media Unmounted"); 

      //do something on unmounted sdcard from device 
     } 
    } 
}; 

आशा है कि यह उपयोगी होगा।