Android-sdcard广播的接收处理

有时候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扫描完成✅...");
        }
    }
}
原文地址:https://www.cnblogs.com/android-deli/p/10136212.html