2020-06-22 18:35:58 +02:00
|
|
|
package org.moire.ultrasonic.service;
|
|
|
|
|
|
|
|
import android.content.BroadcastReceiver;
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.Intent;
|
|
|
|
import android.content.IntentFilter;
|
2020-09-30 14:47:59 +02:00
|
|
|
import timber.log.Timber;
|
2020-06-22 18:35:58 +02:00
|
|
|
|
2020-06-26 15:18:14 +02:00
|
|
|
/**
|
|
|
|
* Monitors the state of the mobile's external storage
|
|
|
|
*/
|
2020-06-22 18:35:58 +02:00
|
|
|
public class ExternalStorageMonitor
|
|
|
|
{
|
|
|
|
private Context context;
|
|
|
|
private BroadcastReceiver ejectEventReceiver;
|
|
|
|
private boolean externalStorageAvailable = true;
|
|
|
|
|
|
|
|
public ExternalStorageMonitor(Context context)
|
|
|
|
{
|
|
|
|
this.context = context;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void onCreate(final Runnable ejectedCallback)
|
|
|
|
{
|
|
|
|
// Stop when SD card is ejected.
|
|
|
|
ejectEventReceiver = new BroadcastReceiver()
|
|
|
|
{
|
|
|
|
@Override
|
|
|
|
public void onReceive(Context context, Intent intent)
|
|
|
|
{
|
|
|
|
externalStorageAvailable = Intent.ACTION_MEDIA_MOUNTED.equals(intent.getAction());
|
|
|
|
if (!externalStorageAvailable)
|
|
|
|
{
|
2020-09-30 14:47:59 +02:00
|
|
|
Timber.i("External media is ejecting. Stopping playback.");
|
2020-06-22 18:35:58 +02:00
|
|
|
ejectedCallback.run();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2020-09-30 14:47:59 +02:00
|
|
|
Timber.i("External media is available.");
|
2020-06-22 18:35:58 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
IntentFilter ejectFilter = new IntentFilter(Intent.ACTION_MEDIA_EJECT);
|
|
|
|
ejectFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);
|
|
|
|
ejectFilter.addDataScheme("file");
|
|
|
|
context.registerReceiver(ejectEventReceiver, ejectFilter);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void onDestroy()
|
|
|
|
{
|
|
|
|
context.unregisterReceiver(ejectEventReceiver);
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isExternalStorageAvailable() { return externalStorageAvailable; }
|
|
|
|
}
|