监听SD卡状态

对比不同状态下的广播
1. 插入外部SD卡时:

2. 移除外部SD卡时:

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

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

代码实现监听
<strong> 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 { } } }; </strong> |
- <receiver android:name=".StaticBroadcastReceiver">
- <intent-filter>
- <action android:name="android.intent.action.BOOT_COMPLETED" />
- <category android:name="android.intent.category.HOME" />
- </intent-filter>
- <intent-filter>
- <action android:name="android.intent.action.MEDIA_MOUNTED"/>
- <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>
- <category android:name="android.intent.category.DEFAULT" />
- <data android:scheme="file" />
- </intent-filter>
- <intent-filter>
- <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
- <action android:name="android.intent.action.USER_PRESENT" />
- </intent-filter>
- </receiver>
- public class StaticBroadcastReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- // TODO Auto-generated method stub
- if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
- Log.d(TAG, "onReceive boot: ");
- Intent new_intent = new Intent(context,TestLauncher.class);
- //popup the activity
- new_intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- context.startActivity(new_intent);
- }else if(intent.getAction().equals(Intent.ACTION_USER_PRESENT)) {
- Log.d(TAG, "onReceive ACTION_USER_PRESENT: ");
- }
- }
- }
- // 在IntentFilter中选择你要监听的行为
- IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_MOUNTED);// sd卡被插入,且已经挂载
- intentFilter.setPriority(1000);// 设置最高优先级
- intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);// sd卡存在,但还没有挂载
- intentFilter.addAction(Intent.ACTION_MEDIA_REMOVED);// sd卡被移除
- intentFilter.addAction(Intent.ACTION_MEDIA_SHARED);// sd卡作为 USB大容量存储被共享,挂载被解除
- intentFilter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);// sd卡已经从sd卡插槽拔出,但是挂载点还没解除
- intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED);// 开始扫描
- intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);// 扫描完成
- intentFilter.addDataScheme("file");
- registerReceiver(broadcastRec, intentFilter);// 注册监听函数
2.接收广播事件处理
- private final BroadcastReceiver broadcastRec = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (action.equals("android.intent.action.MEDIA_MOUNTED"))// SD
- // 卡已经成功挂载
- {
- imagepath = android.os.Environment.getExternalStorageDirectory();// 你的SD卡路径
- Toast.makeText(MyService.this, "我的卡已经成功挂载", 0).show();
- } else if (action.equals("android.intent.action.MEDIA_REMOVED")// 各种未挂载状态
- || action.equals("android.intent.action.ACTION_MEDIA_UNMOUNTED")
- || action.equals("android.intent.action.ACTION_MEDIA_BAD_REMOVAL")) {
- imagepath = android.os.Environment.getDataDirectory();// 你的本地路径
- Toast.makeText(MyService.this, "我的各种未挂载状态", 0).show();
- }else if (action.equals(Intent.ACTION_MEDIA_SCANNER_STARTED)){//开始扫描
- Toast.makeText(MyService.this, "开始扫描...", 0).show();
- }else if (action.equals(Intent.ACTION_MEDIA_SCANNER_FINISHED)){//扫描完成
- Toast.makeText(MyService.this, "扫描完成...", 0).show();
- }else if (action.equals(Intent.ACTION_MEDIA_SHARED)){//扩展介质的挂载被解除 (unmount)。因为它已经作为 USB 大容量存储被共享
- Toast.makeText(MyService.this, " USB 大容量存储被共享...", 0).show();
- }else {
- Toast.makeText(MyService.this, "其他状态...", 0).show();
- }
- Log.i(TAG, "imagepath---" + imagepath);
- }
- };
3.取消注册
- unregisterReceiver(broadcastRec);//取消注册
4.需要在AndroidManifest.xml中添加操作SDCard的权限
1.<!-- 在SDCard中创建与删除文件权限 -->
2. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
3. <!-- 往SDCard写入数据权限 -->
4.<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
监听SD卡状态的更多相关文章
- android86 监听SD卡状态,勒索软件,监听应用的安装、卸载、更新,无序广播有序广播
* 添加权限 <uses-permission android:name="android.permission.RECEIVE_SMS"/> * 4.0以后广播接收者 ...
- Android USB大容量存储时SD卡状态监听(转)
对SD卡状态监听,到现在为止我知道的有两种方式: 1.注册StorageEventListener来监听sd卡状态 StorageEventListener中有onStorageStateChange ...
- Android(java)学习笔记183:判断SD卡状态和存储空间大小
当我们在使用SD卡时候,如果我们想往SD卡里读写数据,我们必须在这之前进行一个逻辑判断,那就是判断SD卡状态和SD存储空间大小: 核心代码: String status = Environment.g ...
- 广播小案例-监听系统网络状态 --Android开发
本例通过广播实现简单的监听系统网络状态改变的小案例. 1.案例效果演示 当手机连网后,系统提示“已连接网络”, 当手机断网后,系统提示“当前网络不可用”. 2.案例实现 在主活动中动态注册广播,然后写 ...
- Android 监听 WiFi 开关状态
Android 监听 WiFi 开关状态 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70854309 本文出自[赵彦军的博客] ...
- Windows Phone 8 获取与监听网络连接状态(转)
原文地址:http://www.cnblogs.com/sonic1abc/archive/2013/04/02/2995196.html 现在的只能手机对网络的依赖程度都很高,尤其是新闻.微博.音乐 ...
- Android_靠谱的监听软键盘状态的方法
public class MyActivity extends AppCompatActivity { /** * 当前界面中的软件盘的状态 */private boolean isKeyBoardO ...
- Android(java)学习笔记126:判断SD卡状态和SD卡容量
1. 判断SD卡状态和SD卡存储空间大小 当我们在使用SD卡时候,如果我们想往SD卡里读写数据,我们必须在这之前进行一个逻辑判断,那就是判断SD卡状态和SD存储空间大小: 核心代码: String s ...
- 使用cordova network-information 插件监听手机网络状态
在使用html5配合cordova做webapp时,有时需要实时监测手机的网络 状况.html5里面是没有相关的js的,这时就需要在cordova里找相关插件了. 一.插件查找 1.在cordova中 ...
随机推荐
- 也说说TIME_WAIT状态
也说说TIME_WAIT状态 一个朋友问到,自己用go写了一个简单的HTTP服务端程序,为什么压测的时候服务端会出现一段时间的TIME_WAIT超高的情况,导致压测的效果不好呢? 记得老王有两篇文章专 ...
- 网络基础:NetBIOS
网络基础小补. 利用 NetBIOS 名称与其他计算机通信 网络中的计算机之间必须知道IP地址后才能相互通信.但对人来说IP难以记忆,NetBIOS计算机名称比较容易记忆.当计算机使用 NetBIOS ...
- 类库,委托,as.is,var,泛型集合
类库: 就是让别人调用你写的方法,并且不让别人看到你是怎么实现的.(比如说一些核心文件) 如果有功能你不会做,需要别人帮忙,那么你的同事可以帮你写好一个类,然后你来调用这个类中的方法,完成你的项目. ...
- ASP.NET MVC 使用Jquery Uploadify 在非IE浏览器下Http Error的解决方案
解决Uploadify上传控件在非IE浏览器中不工作,需要做如下2步修改: 1.Global.asax文件中,实现Application_BeginRequest函数: void Applicatio ...
- MySqlHelper、CacheHelper
MySqlHelper代码: using System; using System.Collections; using System.Collections.Generic; using Syste ...
- inner join on, left join on, right join on的区别与介绍
Table A aid adate 1 a1 2 a2 3 a3 TableB bid bdate 1 b1 2 b2 4 b4 两个表a,b相连接, ...
- iOS阶段学习第六天笔记(数组)
iOS学习( ...
- 提高生产性工具 - Model代码生成器(二)
首先,我想阐述一下我开发这个工具的一个观点. 如果大家做过对日软件的话,很多时候,日方是进行设计的,数据模型是什么样子的,各个字段的类型,需要做什么验证,验证规则,错误信息,都是日方制定的. 外包就是 ...
- 最近Google经常打不开?
最近听好多同事讲google打不开,无法进行搜索,用了代理之后速度还是很慢,而百度搜索又不佳… 就在此分享一些google地址: 个人收藏夹的: 203.208.46.144(这段时间推荐使用这4个地 ...
- maven安装与配置(第一天学习笔记)
Maven下载:http://maven.apache.org/ 1.首先要确保JDK已经安装与配置(注意:用的是apache-maven-3.3.3的JDK1.6不行,我用的是JDK1.8) 2.把 ...
