这件事的背景是什么?

时间:2019-01-15 12:10:02

标签: c# android file xamarin

在像

这样的函数调用中,我很难找到“ Context”值
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();
            }
        }

3 个答案:

答案 0 :(得分:1)

对于那段代码,由于我们不知道上下文是什么,所以实际上没有办法找出Context的来源。

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

但是,实际上并不重要,因为在该方法中唯一使用Context的是Context.OpenFileOutput(BroadCastName, FileCreationMode.Private),并且可以通过任何地方的上下文安全地完成此操作。

修改:

要获取上下文,您只需在活动或服务内使用this关键字即可。

因此,无论您想在哪里运行该方法,都只需调用SetFile("test", MainActivity.this, 2, "");将MainActivity替换为您在其中使用的Activity或Service的类名。

如果要在“活动”或“服务”之外的其他地方使用它,请检查该组件是否具有getContext()方法。

答案 1 :(得分:0)

您可以使用正在调用SetFile方法的活动的上下文。

您可以获得一个 good explanation of the context class in here.

答案 2 :(得分:0)

您可以使用

获取应用程序上下文
List3 = ["Brandy", "Lady", "Baby"].

,然后使用它来传递var currentContext = Android.App.Application.Context; 方法。喜欢,

setFile