在引导设备时使用Android FileObserver的优雅方式

在引导设备时使用Android FileObserver的优雅方式,android,boot,mount,fileobserver,Android,Boot,Mount,Fileobserver,我正在开发一个应用程序,当设备启动时自动启动,它需要监控设备内存中的一些特殊目录,为此,我使用FileObserver,我的代码片段如下: if (folder == null) throw new FailedExecutionException( "Trying to check the limit of a null directory"); Log.d(TAG, "Setting a limit for " + folder.getAbsolutePa

我正在开发一个应用程序,当设备启动时自动启动,它需要监控设备内存中的一些特殊目录,为此,我使用FileObserver,我的代码片段如下:

 if (folder == null)
    throw new FailedExecutionException(
            "Trying to check the limit of a null directory");

Log.d(TAG, "Setting a limit for " + folder.getAbsolutePath());

if (!folder.isDirectory())
    throw new FailedExecutionException(
            "FolderLimit should be checked on directories, "
                    + folder.getAbsolutePath() + " is not a directory");

    //Then create the FileObserver...
当我在设备运行的情况下启动此应用程序时,我观察到的文件夹所在的分区已装入,我可以对其进行监视,问题是当我重新启动设备时,系统将在装入分区之前执行此代码,但它无法将其识别为文件夹:

com.mycompany.android.helpers.util.FailedExecutionException: FolderLimit should be checked on directories, /mnt/sdcard1/mycompany/photo/white_list is not a directory
当然,我可以在(!created){trument()}时执行某种
,但是我想问一下,是否有更优雅的方法来通知此应用程序分区已经装入并且系统已经准备就绪

如果我在shell中执行mount,我拥有的是:

127|root@android:/ # mount | busybox grep sdcard1                              
/dev/block/vold/179:4 /mnt/sdcard1 vfat        rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime= 0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
tmpfs /mnt/sdcard1/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0
多谢各位


编辑我忘了说,我不能使用环境。getExternalStorage()为此,它是一个经过修改的设备,并且这是一个分区,在发布版本中不保证它是外部存储路径

最后,我用暴力做到了这一点

private void attemptToCreateFolderLimit(final File file,
    final long limitCount, final long recycle) {

ThreadFactory.startNewThread(TAG, new Runnable() {

    @Override
    public void run() {
    for (int i = 0; i < FOLDER_LIMIT_CREATION_ATTEMPTS; i++) {
        Log.d(TAG,
            "creating folder limit for "
                + file.getAbsoluteFile());

        try {
        FolderLimit limit = new FolderLimit(file, limitCount,
            recycle);
        folderLimits.add(limit);
        } catch (FailedExecutionException e) {
        Log.e(TAG, "Limit not created");
        Log.e(TAG, Log.getStackTraceString(e));
        }
        try {
        Thread.sleep(FOLDER_LIMIT_TIME_BETWEEN_ATTEMPTS);
        } catch (InterruptedException e) {
        Log.e(TAG, Log.getStackTraceString(e));
        }

    }
    }
});

}
private void试图创建folderlimit(最终文件,
最终长时间限制计数、最终长时间回收){
startNewThread(标记,new Runnable()){
@凌驾
公开募捐{
对于(int i=0;i<文件夹\u限制\u创建\u尝试;i++){
Log.d(标签,
“正在为创建文件夹限制”
+getAbsoluteFile());
试一试{
FolderLimit limit=新的FolderLimit(文件、limitCount、,
回收);
folderLimits.add(limit);
}捕获(失败执行异常e){
Log.e(标记“未创建限制”);
Log.e(TAG,Log.getStackTraceString(e));
}
试一试{
休眠(文件夹\u限制\u尝试之间的时间\u);
}捕捉(中断异常e){
Log.e(TAG,Log.getStackTraceString(e));
}
}
}
});
}

优雅的解决方案和安卓系统不会混用。。。