近期在项目中须要对外部存储设备的状态进行监听,所以整理了此笔记,以便日后查看。

外部存储设备的状态变化时发出的广播

980fdd6667bff974600725dcecff03f3.png

93367816b30c3ca9bc389dab1d39336f.png

对照不同状态下的广播

1. 插入外部SD卡时:

5f1db0bd8e0f9bf80ece30c903d68caf.png

2. 移除外部SD卡时:

4f31ebef3436b3ee71a920afaaae279f.png

3. 连接PC进入USB大容量存储模式时:

77d2b0fbd51443e6b164fbee73571ea2.png

4. 连接PC退出USB大容量存储模式时:

1ce961a6bfcc04ab5eedee7ebef3c597.png

代码实现监听

public void startListen()

{

IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_MOUNTED);

intentFilter.setPriority(1000);

intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);

intentFilter.addAction(Intent.ACTION_MEDIA_REMOVED);

intentFilter.addAction(Intent.ACTION_MEDIA_SHARED);

intentFilter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);

intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED);

intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);

intentFilter.addAction(Intent.ACTION_MEDIA_CHECKING);

intentFilter.addAction(Intent.ACTION_MEDIA_EJECT);

intentFilter.addAction(Intent.ACTION_MEDIA_NOFS);

intentFilter.addAction(Intent.ACTION_MEDIA_BUTTON);

intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);

intentFilter.addDataScheme("file");

registerReceiver(broadcastRec, intentFilter);

}

private final BroadcastReceiver broadcastRec = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

Log.d("MediaAction", action);

if (action.equals("android.intent.action.MEDIA_MOUNTED"))

{

//todo

} else if (action.equals(Intent.ACTION_MEDIA_UNMOUNTED))

{

//todo

}else if (action.equals(Intent.ACTION_MEDIA_SCANNER_STARTED)){

}else if (action.equals(Intent.ACTION_MEDIA_SCANNER_FINISHED)){

}else if (action.equals(Intent.ACTION_MEDIA_SHARED)){

}else {

}

}

};

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐