首页 > 解决方案 > 这件事的背景是什么?

问题描述

我正在努力寻找调用这个函数的“上下文”值,比如

SetFile("Name", ???, 1, "Some text here")

我看过这里https://developer.android.com/reference/android/content/Context但似乎有很多可能性,我不清楚我应该使用哪一个以及如何使用。我不知道该填什么“???” 地方,有人可以帮我解决这个问题吗?

public void SetFile(string BroadCastName, Context Context, long? DirectoryId, string BaseContent)
    {
        if (!BroadCastName.Contains(".enc"))
            BroadCastName = BroadCastName + ".enc";
        if (DirectoryId == null)
            DirectoryId = 2;
        var File = Directories.Where(x => x.Id == DirectoryId).FirstOrDefault().File;
        var Path = Directories.Where(x => x.Id == DirectoryId).FirstOrDefault().Path;
        File FilesDir = new File(Path, "SDDnode");
        FilesDir.Mkdir();
        if (bool.Equals(FilesDir.CanWrite(), true)) {
            File newFile = new File(FilesDir, BroadCastName);
            try
            {
                OutputStreamWriter outputStreamWriter = new OutputStreamWriter(Context.OpenFileOutput(BroadCastName, FileCreationMode.Private));
                outputStreamWriter.Write(BaseContent);
                outputStreamWriter.Flush();
                outputStreamWriter.Close();
            }
            catch (IOException e)
            {
                #region
                ledger._base.Errors.Add(new Error {
                    Message = "Something went wrong in generate file in Android",
                    Process = "sddnode_android.Base._system",
                    Sys_Message = e.Message,
                    Line = 115,
                    Priority = 1
                });
                #endregion
            }

            OutputStream os;
            try
            {
                os = new FileOutputStream(newFile);
                //target.compress(CompressFormat.PNG, 100, os);
                os.Flush();
                os.Close();
            }
            catch (FileNotFoundException e)
            {
                e.PrintStackTrace();
            }
            catch (IOException e)
            {
                e.PrintStackTrace();
            }
        }

标签: c#androidfilexamarin

解决方案


对于那段代码,真的没有办法找出那个上下文来自哪里,因为我们不知道它叫什么。

但是,由于方法的类型,最高可能性是活动上下文,尽管服务也可能。

但是,这真的没关系,因为在该方法中唯一使用 Context 是Context.OpenFileOutput(BroadCastName, FileCreationMode.Private),这是可以从任何地方使用上下文安全地完成的事情。

编辑:

要获取上下文,您可以简单地this在 Activity 或 Service 中使用关键字。

因此,无论您想在哪里运行该方法,只需SetFile("test", MainActivity.this, 2, "");使用您正在使用它的 Activity 或 Service 的类名调用 Replace MainActivity。

如果您在 Activity 或 Service 之外的其他地方使用它,请检查该组件是否具有getContext()方法。


推荐阅读