Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在xamarin android中,如何(从URL)下载带有按钮的apk?_C#_Xamarin.android_Webclient Download_Downloadfile - Fatal编程技术网

C# 在xamarin android中,如何(从URL)下载带有按钮的apk?

C# 在xamarin android中,如何(从URL)下载带有按钮的apk?,c#,xamarin.android,webclient-download,downloadfile,C#,Xamarin.android,Webclient Download,Downloadfile,我使用WebClient在我的apk中下载了一个文件。但我有一个错误: 未处理的异常: System.Net.WebException:WebClient请求期间发生异常 这是我试过的代码: { using (WebClient client = new WebClient()) { client.DownloadFile( "https://

我使用
WebClient
在我的apk中下载了一个文件。但我有一个错误: 未处理的异常:

System.Net.WebException:WebClient请求期间发生异常

这是我试过的代码:

        {
            using (WebClient client = new WebClient())
            {

                    client.DownloadFile(
                        "https://code.org/images/social-media/code-2018-creativity.png",
                        @"j:\storage\emulated\legacy\Download\code-2018-creativity.png");


            }
        }   

由于您仅引用WebException,因此可能与以下情况之一有关:

  • 基地址
    地址
    组合而成的URI无效
  • 文件或目标文件夹不存在。确定你要去的地方 目标文件夹已存在,并且您有权访问它
  • 在运行时发生错误 下载数据
如果您向我们提供有关异常的更多信息,我们可以将错误减少到这些情况之一。要获取
InnerException
,可以执行以下操作:

{
  using (WebClient client = new WebClient ())
  {
    try
    {
      client.DownloadFile (
        "https://code.org/images/social-media/code-2018-creativity.png",
        @"j:\storage\emulated\legacy\Download\code-2018-creativity.png");
    }
    catch (Exception ex)
    {
      while (ex != null)
      {
        Console.WriteLine (ex.Message);
        ex = ex.InnerException;
      }
    }
  }
}

如果您运行的是AndroidAPI级别23或更高,即使您在清单文件中提到了权限,也必须在运行时请求权限

查看此博客将有助于了解如何请求运行时权限:

此外,这是如何检查的官方样本

参考:

更新:

要请求运行时权限,可以使用此插件:,将其安装到项目中

然后,调用
CheckMyPermissionAsync()下载文件之前:

private void FabOnClick(object sender, EventArgs eventArgs)
{
    View view = (View) sender;

    CheckMyPermissionAsync();
}
在方法
CheckMyPermissionAsync()
中,检查您的存储权限,然后下载文件:

 public async void CheckMyPermissionAsync()
        {

            var permissionsStartList = new List<Permission>()
            {
                Permission.Storage
            };

            var permissionsNeededList = new List<Permission>();
            try
            {
                foreach (var permission in permissionsStartList)
                {
                    var status = await CrossPermissions.Current.CheckPermissionStatusAsync(permission);
                    if (status != PermissionStatus.Granted)
                    {
                        permissionsNeededList.Add(permission);
                    }
                }
            }
            catch (Exception ex)
            {
            }

            var results = await CrossPermissions.Current.RequestPermissionsAsync(permissionsNeededList.ToArray());

            //Check the persimmison again
            var storeagePermission = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Storage);

            if (storeagePermission == PermissionStatus.Granted)
            {
                //Download file here
                DownloadFile("http://www.dada-data.net/uploads/image/hausmann_abcd.jpg", "XF_Downloads");
            }
            else {

                Console.WriteLine("No permissions");
            }         
        }
注意:请注意您的文件路径,确保您的路径正确,我使用:

string pathToNewFolder = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, folder);

我在这里更新了我的示例:

您能提供有关此异常的更多详细信息吗?(可能InnerException会有所帮助)我从控制台获得此消息:06-09 18:29:56.662 I/mono标准输出(3959):WebClient请求期间发生异常。对路径“/j:\storage\emulated\legacy\Download\code-2018-creative.png”的访问被拒绝。你知道@CiubotariFlorin吗?你使用的是什么Android版本?我的minSdkVersion设置在API 16@CiubotariFlorin上。我从控制台获得此消息:06-09 18:29:56.662 I/mono标准输出(3959):WebClient请求期间发生异常。拒绝访问路径“/j:\storage\emulated\legacy\Download\code-2018-creative.png”。我现在该怎么办?我将路径更改为:@“j:\sdcard\code-2018-creative.png”,并将这些权限添加到manifest:但这没有帮助。你知道@DiogoRocha吗?我读了你引用的链接,但请原谅@JackHua,“我真的不知道我现在该怎么做了。”mohamadaminkaviyani我将分享一个样本给你,告诉你该怎么做。稍后我会更新。非常感谢@JackHua。我刚刚在手机上测试了这个应用程序(过去的结果来自emulator),但它甚至没有启动:|@mohamadaminkaviyani看到了我编辑过的答案。让我知道它是否适合你。非常感谢你@JackHua。问题解决了,但我犯了一个尴尬的错误:@“j:\storage\emulated\legacy\Download\code-2018-creative.png”正确的形式是:@“j:/storage/emulated/legacy/Download/code-2018-creative.png”
string pathToNewFolder = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, folder);