首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FileObserver类对于OnEvent(FileObserverEvents e,String path)中的路径总是具有空值。

FileObserver类对于OnEvent(FileObserverEvents e,String path)中的路径总是具有空值。
EN

Stack Overflow用户
提问于 2017-09-08 04:00:54
回答 1查看 364关注 0票数 0

这个问题是this问题的扩展。发布另一个问题,因为这是封闭的。

我正在实现FileObserver类,正如@SushiHangover提到的那样,但是当事件(OnEvent)被触发时,路径的值为null,e的值为1073741856。

这就是我按照FileObserver的建议初始化@SushiHangover的方式。

代码语言:javascript
运行
复制
[Activity(Label = "Main Menu")]
public class MainView : MvxActivity
{
    public MusicFolderObserver MusicFolderObserver;

    protected override void OnViewModelSet()
    {
        File musicFolder = new File(Environment.GetExternalStoragePublicDirectory(Environment.DirectoryMusic), "/MyFolder");
        MusicFolderObserver = new MusicFolderObserver (musicFolder.AbsolutePath);
        MusicFolderObserver.StartWatching();
        SetContentView(Resource.Layout.View_Main);
    }
}

下面是文件观察者类

代码语言:javascript
运行
复制
public class MusicFolderObserver : FileObserver
{

    static FileObserverEvents _Events = (FileObserverEvents.AllEvents);
    const string tag = "StackoverFlow";

    public MusicFolderObserver (String rootPath) : base(rootPath, _Events)
    {
        Log.Info(tag, String.Format("Watching : {0}", rootPath));
    }

    public MusicFolderObserver (String rootPath, FileObserverEvents events) : base(rootPath, events)
    {
        Log.Info(tag, String.Format("Watching : {0} : {1}", rootPath, events));
    }

    public override void OnEvent(FileObserverEvents e, String path)
    {
        Log.Info(tag, String.Format("{0}:{1}", path, e));
    }
}

请让我知道如何使这个观察者在整个应用程序运行期间活动。我正在尝试制作一个24/7活动的应用程序,如果观察到的音乐文件夹中有任何更改,就会触发

EN

回答 1

Stack Overflow用户

发布于 2017-09-08 05:11:10

FileObserverEvents of 1073741856 包含aFileObserverEvents.Open标志:

代码语言:javascript
运行
复制
if (e.HasFlag(FileObserverEvents.Open))
{
    Log.Debug(tag, $"File Opened : {path}");
}

当Android ( Linux )操作目录中的一个文件时,您可能会看到一系列事件,因为它更改了目录的内容,许多这些操作(FileObserverEvents)将没有附加到它们的路径,在您的情况下,这些操作可以被忽略(如果您在获得空路径时需要所有事件标志的详细信息,请参阅Linux文件系统引用)。

OnEvent重写示例:

代码语言:javascript
运行
复制
public override void OnEvent(FileObserverEvents e, String path)
{
    if (path == null) return;
    Log.Debug(tag, $"{path} : {e}");
}

Touch一个新文件:

代码语言:javascript
运行
复制
adb shell touch /sdcard/Music/MyFolder/BohemianRhapsody100.mp3

在以下方面的成果:

代码语言:javascript
运行
复制
SO      : BohemianRhapsody100.mp3 : Create
SO      : BohemianRhapsody100.mp3 : Open
SO      : BohemianRhapsody100.mp3 : CloseNowrite

移动文件:

代码语言:javascript
运行
复制
adb shell mv /sdcard/Music/MyFolder/BohemianRhapsody100.mp3 /sdcard/Music/MyFolder/BohemianRhapsody101.mp3

在以下方面的成果:

代码语言:javascript
运行
复制
SO      : BohemianRhapsody100.mp3 : MovedFrom
SO      : BohemianRhapsody101.mp3 : MovedTo

删除文件:

代码语言:javascript
运行
复制
adb shell rm /sdcard/Music/MyFolder/BohemianRhapsody101.mp3

在以下方面的成果:

代码语言:javascript
运行
复制
SO      : BohemianRhapsody101.mp3 : Delete

等等..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46108418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档