android 监听SD卡文件变化的实现代码

Android系统API提供了FileObserver抽象类(Linux的INotify机制)来监听系统/sdcard中的文件或文件夹,FileObserver类能对sdcard中的文件及文件夹的打开、创建、移动和删除操作进行监控。下面看看代码实现:

(1)创建目录监听器:

  import android.os.FileObserver;
  import android.util.Log;
  /**
   * SD卡中的目录创建监听器。
   *
   * @author mayingcai
   */
  public class SDCardListener extends FileObserver {
     public SDCardListener(String path) {
         /*
         * 这种构造方法是默认监听所有事件的,如果使用 super(String,int)这种构造方法,
         * 则int参数是要监听的事件类型.
         */
         super(path);
     }
     @Override
     public void onEvent(int event, String path) {
         switch(event) {
            case FileObserver.ALL_EVENTS:
                Log.d("all", "path:"+ path);
                break;
            case FileObserver.CREATE:
                Log.d("Create", "path:"+ path);
                break;
         }
     }
  } 

(2)给目录设置监听器:

   SDCardListener listener = new SDCardListener("目录");
  //开始监听
  listener.startWatching();
  /*
   * 在这里做一些操作,比如创建目录什么的
   */
  //停止监听
  listener.stopWatching(); 

注意事项:

FileObserver对象必须保持一个引用,确保不被垃圾收集器回收掉,否则就不会触发事件,这里可以考虑使用Service服务。

2 如果要在onEvent中做较多操作,最好使用线程去做 ,以免因为阻塞接收不到后面的事件。

3.风信子经过测试,FileObserver所监听的某一文件夹下的子文件夹中的文件信息被改变时,提供的path只是该子文件夹的path,并不是具体文件的path,所以要监听所有文件的操作时,最好是给每一个文件夹都设置FileObserver监听,可以具体到每一个文件的修改,否则某些应用对文件进行修改后会监听不到,例如已监听SDCARD文件目录,当Gallery对/sdcard/xxx进行修改等操作时,会监听到,当Gallery对/sdcard/demo/xxxx进行操作时不会被监听到,最好是对/sdcard以及/sdcard/demo连个文目录分别设置FileObserver监听就可以解决这个问题。

注:此方法只在SDCard有20个左右的文件夹时测试,如果文件夹过多会不会影响太多的效率并不清楚。我发现Dbank也是监听了固定的几个含有图片的文件夹

ps:下面介绍监听SD卡状态的三部曲

第一步,创建一个广播接收者,

 SDReceiver  extends BroadcastReceiver ; 

第二步,在AndroidManifest.xml配置文件中注册广播接收者与配置监SD卡状态发生变化时对应的Action:

 <receiver android:name="com.itheima.sdlistener.SDReceiver">
      <intent-filter >
        <action android:name="android.intent.action.MEDIA_MOUNTED"/>
        <action android:name="android.intent.action.MEDIA_REMOVED"/>
        <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>
        <data android:scheme="file"/>
      </intent-filter>
 </receiver>

第三步,重写广播接受者中OnReceiver方法:

public void onReceive(Context context, Intent intent) {
//判断收到的是神马广播
//获取广播中的action
String action = intent.getAction();
if(Intent.ACTION_MEDIA_MOUNTED.equals(action)){
Toast.makeText(context, "sd卡就绪", 0).show();
}
else if(Intent.ACTION_MEDIA_REMOVED.equals(action)){
Toast.makeText(context, "sd卡被拔出了", 0).show();
}
else if(Intent.ACTION_MEDIA_UNMOUNTED.equals(action)){
Toast.makeText(context, "sd卡被卸载了", 0).show();
}
 }

总结

以上所述是小编给大家介绍的android 监听SD卡文件变化的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Android创建文件实现对文件监听示例

    复制代码 代码如下: public class FileObserverTest extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);MyFileObserver mfo = new MyFileObserver(getApplicationContext().getFilesDir() + "/data.txt"

  • android获取监听SD Card状态的方法

    本文实例讲述了android获取监听SD Card状态的方法.分享给大家供大家参考.具体分析如下: 1. 注册StorageEventListener来监听SD卡状态即onStorageStateChanged()方法,当sd卡状态改变时,调用该方法. 复制代码 代码如下: public void onStorageStateChanged(String path,String oldState,String newState){ if (newState.equals(Environment.

  • Android获取监听SD卡状态

    项目简介: 该项目监听SD卡状态 详细介绍: 部署该应用后,当SD卡状态发送改变时,系统会发出吐司通知用户 该应用涉及到的知识有: 1.Android的四大组件之一:广播接收者的使用 2.SD卡状态的广播 注意: 1.只有在 2.x 模拟器上才能对SD卡进行操作,所以该应用应当部署在 2.x 的模拟器上 2.一个广播接收者是可以接受多个广播的,直接添加多个action就可以了 3.SD卡不同的状态有不同的广播,主要有三种: <action android:name="android.int

  • android 监听SD卡文件变化的实现代码

    Android系统API提供了FileObserver抽象类(Linux的INotify机制)来监听系统/sdcard中的文件或文件夹,FileObserver类能对sdcard中的文件及文件夹的打开.创建.移动和删除操作进行监控.下面看看代码实现: (1)创建目录监听器: import android.os.FileObserver; import android.util.Log; /** * SD卡中的目录创建监听器. * * @author mayingcai */ public cla

  • Android开发之SD卡文件操作分析

    本文实例讲述了Android开发之SD卡文件操作.分享给大家供大家参考,具体如下: 前面的文章中写过直接操作手机自带存储器的程序,这次就接着上次文章协议下对sd卡的文件操作.与自带存储不同的是使用sd卡需要用户授权 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permissi

  • Android 中读取SD卡文件时抛出NullPointerException错误解决办法

    Android 中读取SD卡文件时抛出NullPointerException错误解决办法 相关源码: package com.example.musicplayer; import java.io.File; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.os.Environment; import

  • Android 监听屏幕是否锁屏的实例代码

    今天,简单讲讲如何监听手机屏幕是否锁屏. 实现方法: 1)通过BroadcastReceiver接收广播Intent.ACTION_SCREEN_ON和Intent.ACTION_SCREEN_OFF可以判断屏幕状态是否锁屏,但是只有屏幕状态发生改变时才会发出广播: 2)如果要在屏幕状态发生改变之前就想获取屏幕状态,可以通过反射机制调用PowerManager的isScreenOn方法 . 具体实现,见代码: 直接上代码: 1.定义一个接收广播的类 package com.app.lib; im

  • android 监听网络状态的变化及实战的示例代码

    平时我们在请求错误的情况下,通常会进行处理一下,一般来说,主要分为两方面的错误 没有网络的错误 在有网络的情况下,我们客户端的错误或者服务器端的错误 今天这篇博客主要阐述以下问题 怎样监听网络状态的变化,包括是否打开WiFi,否打开数据网络,当前连接的网络是否可用 网络没有打开情况下的处理,如弹出对话框,跳转到 打开 WiFi设置的界面等 非WiFi情况下是否加载图片,是否播放视频等 实现思路 在网络错误的情况下获取网络状态进行判断,这种方法是可行的,但你想过了没有,如果每次都要进行这样的判断,

  • 基于Android 监听ContentProvider 中数据变化的相关介绍

    如果ContentProvider的访问者需要知道ContentProvider中的数据的变化情况,可以在ContentProvider发生数据变化时调用getContentResolver().notifyChange(uri,null)来通知注册在此URI上的访问者. 复制代码 代码如下: public class PersonContentProvider extends ContentProvider[ public Uri insert(Uri uri,ContentValues va

  • Android 搜索SD卡文件的开发示例

    我们在进行Android开发时往往需要访问SD卡的内容,而且因为文件很多,希望能够在SD卡中进行搜索.本文就给出一个Android开发实例,演示如何搜索SD卡里的文件.        实例界面 首先让那个大家看看程序运行后的界面是什么样子的: 在第一个EditText中设置搜索的目录,默认为根目录"/". 第二个EditText为所要搜索的关键字.        Layout布局  下面贴出layout中的布局文件内容,应该说也是比较简单的,难度不大. XML/HTML代码 <?

  • microlog4android将Android Log日志写到SD卡文件中实现方法

    我们在进行Android开发时,经常会有这种体会,由于客户的设备型号各不相同,从而导致出现多种问题,但对于研发人员,因为没有log日志文件,不太容易定位问题的具体位置.所以我们急需一个能将程序日志写到SD卡文件里的工具,类似web的log4j那样.这时microlog4android进入我们的视野,虽然它尚有不足,但也已能满足大部分需求.        使用microlog4android的步骤如下:        1.下载 到http://code.google.com/p/microlog4

  • 最简单的SD卡文件遍历Android程序

    本文实例为大家分享了最简单的SD卡文件遍历程序,供大家参考,具体内容如下 package com.wenhao.test.sddemo; import java.io.File; import android.app.Activity; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.view.View.OnClickListener; import

随机推荐