有时候Android手机在开机成功后的那几秒会在状态栏通知,Sdcard开始扫描,Sdcard扫描完成,等信息
当Sdcard的状态发生改变后,系统会自动的发出广播
Sdcard的状态:
1.mount 挂载;
2.unmount 卸载移除;
3.start_scan 开始扫描;
4.scan_finish 扫描完成;
Sdcard是存储东西的,Sdcard通常是用Media挂钩,Android系统把它理解为:媒体数据
在AndroidManifest.xml订阅广播
<!-- 订阅(Xml形式订阅接收者) 订阅Sdcard接收者,此接收者专门去接收Sdcard状态,发送改变的四种广播 --> <receiver android:name=".br.SdcardBroadcastReceiver"> <intent-filter> <!-- 卸载移除Sdcard --> <action android:name="android.intent.action.MEDIA_UNMOUNTED" /> <!-- 挂载Sdcard --> <action android:name="android.intent.action.MEDIA_MOUNTED" /> <!-- Sdcard开始扫描 --> <action android:name="android.intent.action.MEDIA_SCANNER_STARTED" /> <!-- Sdcard扫描完成✅ --> <action android:name="android.intent.action.MEDIA_SCANNER_FINISHED" /> <!-- 系统是这样发送广播的,所以必须这样订阅 --> <data android:scheme="false" /> </intent-filter> </receiver>
在SdcardBroadcastReceiver接收多个Sdcard状态改变的广播
package liudeli.croadcast1.br; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; /** * Sdcard接收者,可以接收四个广播 * 当Sdcard的状态发生改变后,系统会自动的发出以下四种广播 * * 1.mount 挂载; * * 2.unmount 卸载移除; * * 3.start_scan 开始扫描; * * 4.scan_finish 扫描完成; */ public class SdcardBroadcastReceiver extends BroadcastReceiver { private final String TAG = SdcardBroadcastReceiver.class.getSimpleName(); @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (Intent.ACTION_MEDIA_MOUNTED.equals(action)) { Log.d(TAG, "Sdcard挂载了..."); } else if (Intent.ACTION_MEDIA_UNMOUNTED.equals(action)) { Log.d(TAG, "Sdcard卸载了 移除了..."); } else if (Intent.ACTION_MEDIA_SCANNER_STARTED.equals(action)) { Log.d(TAG, "Sdcard开始扫描..."); } else if (Intent.ACTION_MEDIA_SCANNER_FINISHED.equals(action)) { Log.d(TAG, "Sdcard扫描完成✅..."); } } }