我有一些在Android上挑选文件的代码。我从网上找的。实际上,代码在一个场景下工作,但在我的应用程序中,它不工作。Android认为用户取消了文件选择,而实际上他们还没有。
private Task<FileData> PickAndOpenFile(bool isSave)
{
var id = GetRequestId();
var ntcs = new TaskCompletionSource<FileData>(id);
if (Interlocked.CompareExchange(ref _CompletionSource, ntcs, null) != null)
{
throw new InvalidOperationException("Only one operation can be active at a time");
}
try
{
var pickerIntent = new Intent(_Context, typeof(FilePickerActivity));
pickerIntent.SetFlags(ActivityFlags.NewTask);
_Context.StartActivity(pickerIntent);
EventHandler<FilePickerEventArgs> handler = null;
EventHandler<EventArgs> cancelledHandler = null;
handler = (s, e) =>
{
var tcs = Interlocked.Exchange(ref _CompletionSource, null);
FilePickerActivity.FilePicked -= handler;
Stream fileStream = isSave ? File.OpenRead(e.FilePath) : File.OpenWrite(e.FilePath);
tcs?.SetResult(new FileData { FileName = e.FileName, FileStream = fileStream });
};
cancelledHandler = (s, e) =>
{
var tcs = Interlocked.Exchange(ref _CompletionSource, null);
FilePickerActivity.FilePickCancelled -= cancelledHandler;
tcs?.SetResult(null);
};
FilePickerActivity.FilePickCancelled += cancelledHandler;
FilePickerActivity.FilePicked += handler;
}
catch (Exception exAct)
{
Debug.Write(exAct);
}
return _CompletionSource.Task;
}
var filePicker = App.PlatformSpecificStartupArguments.PresentationFactory.CreateFilePicker();
using (var fileData = await filePicker.PickAndOpenFileForReading())
{
if (fileData == null)
{
return;
}
using (var readFileStream = fileData.FileStream)
{
var fileExtension = Path.GetExtension(fileData.FileName);
var relativeUri = Guid.NewGuid() + fileExtension;
await OnPictureTakenAsync(this, new PictureTakenEventArgs(readFileStream, relativeUri, fileData.FileName));
}
}
但是,当我选择文件(从现有图像中选择一个图像)时,代码进入cancelledHandler。这显然是一个权限问题,因为我在设备日志中收到以下错误消息:
08-02 15:15:28.697 LGE Nexus 5X错误18911 DatabaseUtils java.lang.SecurityException:权限拒绝:从PID=18684,UID=10221读取com.android.providers.media.mediaProvider uri内容://media/external/images/media,需要android.Permission.read_external_storage或android.content.contentProvider.EnforceRadPermissionInner(contentProvider.java:608)或
所以,我在Visual Studio级别的Android清单中打开了这个权限,但问题仍然存在。我所针对的Android版本是6.0。您可以看到,在上面提到的repo中,目标版本被设置为“use compile using SDK version”。而且我甚至还没有将READ_EXTERNAL_STORAGE添加到示例应用程序中。
我在Visual Studio级别的Android清单中打开了此权限,但问题仍然存在。
从Android6.0(API级别23)开始,用户在应用程序运行时授予应用程序权限,而不是在安装应用程序时授予应用程序权限。您应该在运行时请求权限。
系统权限分为两类,正常和危险:
read_external_storage
分为危险权限,因此您应该手动检查API级别23及更高级别的权限。
下面是一个关于如何在运行时请求权限的示例。
我有一个bean生产者和一个bean消费者,在一条路由中使用。生产者是通过一个线程产生的,并监听hazelcast队列上的数据(它可能是其他任何东西,甚至是本地随机生成的数据)。 数据被发送到sedaendpoint,以确保并发性。使用者获取数据并将其转发到另一个hazelcast队列。但也可能是其他任何东西。 然后在300秒内静止处理并停止。 下面是一些代码: 制片人: 谢了!
我不知所措。 我有一个数据类'Order',它有一个字段。当我试图在接受的方法中使用这个时,我会得到一个编译器错误,其内容如下: 我使用的是Java11、Spring JPA和PostgreSQL。 我从未在Java中见过这样的编译器错误(经过多年的编程),我不知所措。
我试图读取来自CXF拦截器的SOAP错误消息,但我无法提取,我捕获了来自Fidler的响应 以下是菲德勒的回应 以下是我的代码 向客户端添加了FaultInterceptor
完全新的Java和J汤。我试图创建一个简单的程序,刮网络,给我Java股市的数据。我想从道琼斯股票开始,让它打印出52周的区间数据。它转到http://finance.yahoo.com/quote/AAPL?ltr=1,查看左下表(从上一次收盘价开始),然后下到第5个索引,从那里获取文本值。我得到的错误: 线程“main”组织中出现异常。jsoup。选择选择器$SelectorParseExce
我试图通过传递故事格式化ID来查找特定故事下的任务列表,但我没有得到该故事下列出的任务。 我尝试将projectRef和WorkspaceRef传递给QueryFiletr,尽管我已经传递了Story FormattedID,这实际上已经足够了。 请让我知道,代码有什么问题。。。
这似乎是一个永无止境的故事,但我无法从Twitter4J流API访问Twitter。 > 我创建了一个Twitter帐户,并将时区更改为我的祖国 我在Twitter上创建了一个App 我创建了一个ClientApp在Java /Maven与Twitter4J流API 4.0.0 我在配置生成器中放置了Api-Key、秘密密钥和访问令牌 我从推特上得到一个例外 401:身份验证凭据(https://