0

我尝试根据 FileExplorer 示例在 BlackBerry 中侦听文件更改事件,但每当我添加或删除文件时,它总是显示“在使用设备时延迟持久性”,我无法捕捉到任何东西。
这是我的代码:

public class FileChangeListenner implements FileSystemJournalListener{

private long _lastUSN; // = 0;     
public void fileJournalChanged() {
    long nextUSN = FileSystemJournal.getNextUSN();
    String msg = null;       
    for (long lookUSN = nextUSN - 1; lookUSN >= _lastUSN && msg == null; --lookUSN) 
    {
        FileSystemJournalEntry entry = FileSystemJournal.getEntry(lookUSN);
        // We didn't find an entry
        if (entry == null) 
        { 
            break;
        }
        // Check if this entry was added or deleted
        String path = entry.getPath();            
        if (path != null) 
        {  
            switch (entry.getEvent()) 
            {
                case FileSystemJournalEntry.FILE_ADDED:
                    msg = "File was added.";                       
                    break;

                case FileSystemJournalEntry.FILE_DELETED:
                    msg = "File was deleted.";
                    break;
            }
        }
    }        
    _lastUSN = nextUSN;        
    if ( msg != null ) 
    {           
        System.out.println(msg);
    }
}
}

这是调用者:

Thread t = new Thread(new Runnable() {
            public void run() {
                new FileChangeListenner();
                try {
                    Thread.sleep(5000);
                    createFile();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }                   
            }
        });
        t.start();

创建文件方法工作正常:

   private void createFile() {
    try {
        FileConnection fc = (FileConnection) Connector
                .open("file:///SDCard/newfile.txt");
        // If no exception is thrown, then the URI is valid, but the file
        // may or may not exist.
        if (!fc.exists()) {
            fc.create(); // create the file if it doesn't exist
        }
        OutputStream outStream = fc.openOutputStream();
        outStream.write("test content".getBytes());
        outStream.close();
        fc.close();
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}

和输出:

 0:00:44.475: Deferring persistence as device is being used.
 0:00:46.475: AG,+CPT
 0:00:46.477: AG,-CPT
 0:00:54.476: VM:+GC(f)w=11
 0:00:54.551: VM:-GCt=9,b=1,r=0,g=f,w=11,m=0
 0:00:54.553: VM:QUOT t=1
 0:00:54.554: VM:+CR
 0:00:54.596: VM:-CR t=5
 0:00:55.476: AM: Exit net_rim_bb_datatags(291)
 0:00:55.478: Process net_rim_bb_datatags(291) cleanup started
 0:00:55.479: VM:EVTOv=7680,w=20
 0:00:55.480: Process net_rim_bb_datatags(291) cleanup done
 0:00:55.481: 06/25 03:40:41.165 BBM FutureTask Execute: net.rim.device.apps.internal.qm.bbm.platform.BBMPlatformManagerImpl$3@d1e1ec79
 0:00:55.487: 06/25 03:40:41.171 BBM FutureTask Finish : net.rim.device.apps.internal.qm.bbm.platform.BBMPlatformManagerImpl$3@d1e1ec79

我还尝试直接在模拟器的 sdcard 中删除线程或创建或删除文件,但它没有帮助。
请告诉我我的问题在哪里。谢谢

4

1 回答 1

1

您实例化FileChangeListenner,但您从不注册它,也不要将它作为变量保存在任何地方。您可能需要添加此调用

FileChangeListenner listener = new FileChangeListenner();
UiApplication.getUiApplication().addFileSystemJournalListener(listener);

listener只要您想接收事件,您可能还需要保留引用 ( )。但也许不是(addFileSystemJournalListener()电话可能会这样做)。但是,您至少需要对 的调用addFileSystemJournalListener(),否则您将永远不会fileJournalChanged()被回调。

于 2012-06-25T05:28:59.363 回答