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);