Xamarin.Forms.Platform.iOS.FormsApplicationDelegate OpenUrl 中的访问被拒绝
AccessDenied in Xamarin.Forms.Platform.iOS.FormsApplicationDelegate OpenUrl
我已经注册了我的文件类型,当我试图读取传递的文件时,我总是遇到拒绝访问异常。这是我当前的代码:
public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
{
var text = File.ReadAllText(url.Path); <- Exception here
// todo: handle text
return true;
}
在 android 上,我使用了 ContentResolver:
using (var inputStream = ContentResolver.OpenInputStream(Intent.Data))
{
using (StreamReader reader = new StreamReader(inputStream))
{
string text = reader.ReadToEnd();
Clipboard.SetTextAsync(text);
}
}
但我没有找到在 iOS 上读取传递文件的等效项。
看看这个帖子: .
我把objective-C转成了c#,你可以在你的项目中试试。
public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
{
string urlPath = url.Path;
NSData data = null;
if (!NSFileManager.DefaultManager.IsReadableFile(urlPath)) {
if (url.StartAccessingSecurityScopedResource())
{
data = NSData.FromFile(urlPath);
url.StopAccessingSecurityScopedResource();
}
}
else
{
data = NSData.FromFile(urlPath);
}
NSString str = NSString.FromData(data, NSStringEncoding.UTF8);
return true;
}
我已经注册了我的文件类型,当我试图读取传递的文件时,我总是遇到拒绝访问异常。这是我当前的代码:
public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
{
var text = File.ReadAllText(url.Path); <- Exception here
// todo: handle text
return true;
}
在 android 上,我使用了 ContentResolver:
using (var inputStream = ContentResolver.OpenInputStream(Intent.Data))
{
using (StreamReader reader = new StreamReader(inputStream))
{
string text = reader.ReadToEnd();
Clipboard.SetTextAsync(text);
}
}
但我没有找到在 iOS 上读取传递文件的等效项。
看看这个帖子:
我把objective-C转成了c#,你可以在你的项目中试试。
public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
{
string urlPath = url.Path;
NSData data = null;
if (!NSFileManager.DefaultManager.IsReadableFile(urlPath)) {
if (url.StartAccessingSecurityScopedResource())
{
data = NSData.FromFile(urlPath);
url.StopAccessingSecurityScopedResource();
}
}
else
{
data = NSData.FromFile(urlPath);
}
NSString str = NSString.FromData(data, NSStringEncoding.UTF8);
return true;
}