I have a program that uses content from sd-card. I want to listen to different states like sd-card mounted or sd-card removed unexpectedly. How can I do so. An example would be of a great help.
Thanks to all
You need to listen for ACTION_MEDIA_REMOVED and ACTION_MEDIA_MOUNTED. Create a receiver and listen for this action.
EDIT:
In your manifest file add this
<receiver android:name=".MyReceiver" >
    <intent-filter>
        <action android:name="android.intent.action.MEDIA_REMOVED" />
        <action android:name="android.intent.action.MEDIA_MOUNTED" />
        <data android:scheme="file" />
    </intent-filter>
</receiver>
then create a class MyReceiver which will extend BroadcastReceiver and then catch these actions and perform what you want to do.
Thanks to @PravinCG
Here is the complete code.
SDCardBroadcastReceiver.java code
public class SDCardBroadcastReceiver extends BroadcastReceiver {
    private static final String ACTION_MEDIA_REMOVED = "android.intent.action.MEDIA_REMOVED";
    private static final String ACTION_MEDIA_MOUNTED = "android.intent.action.MEDIA_MOUNTED";
    private static final String MEDIA_BAD_REMOVAL = "android.intent.action.MEDIA_BAD_REMOVAL";
    private static final String MEDIA_EJECT = "android.intent.action.MEDIA_EJECT";
    private static final String TAG = "SDCardBroadcastReceiver";
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "Intent recieved: " + intent.getAction());
        if (intent.getAction() == ACTION_MEDIA_REMOVED) {
            Log.e(TAG, "ACTION_MEDIA_REMOVED called");
            // For bundle Extras do like below
//            Bundle bundle = intent.getExtras();
//            if (bundle != null) {
//
//            }
        }else if (intent.getAction() == ACTION_MEDIA_MOUNTED){
            Log.e(TAG, "ACTION_MEDIA_MOUNTED called");
        }else if(intent.getAction() == MEDIA_BAD_REMOVAL){
            Log.e(TAG, "MEDIA_BAD_REMOVAL called");
        }else if (intent.getAction() == MEDIA_EJECT){
            Log.e(TAG, "MEDIA_EJECT called");
        }
    }
}
and here is my manifest.xml file 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="genetechsolutions.sdcardmountlistner">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".SDCardBroadcastReceiver" >
            <intent-filter>
                <data android:scheme="file" />
                <action android:name="android.intent.action.MEDIA_REMOVED" />
                <action android:name="android.intent.action.MEDIA_MOUNTED" />
                <action android:name="android.intent.action.MEDIA_EJECT" />
                <action android:name="android.intent.action.MEDIA_BAD_REMOVAL" />
            </intent-filter>
        </receiver>
    </application>
</manifest>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With