.NET MAUI
一种 Microsoft 开源框架,用于构建跨移动设备、平板电脑、台式机的原生设备应用程序。
130 个问题
测试环境:.net8 android api 33,权限的弹窗没弹出,默认返回的Denied,怎么解决,这个android版本是不支持吗。
public static async Task<PermissionStatus> CheckAndRequestStorageWritePermission ()
{
var status = await Permissions.CheckStatusAsync<Permissions.StorageWrite>();
if ( status != PermissionStatus.Granted )
{
status = await Permissions.RequestAsync<Permissions.StorageWrite>();
}
return status;
}
//> Page.cs
//> 业务逻辑
public async void Initialized ()
{
string workerspaceRoot = Path.Combine(StorageDirectory,"测试目录");
if ( !Directory.Exists(workerspaceRoot) )
{
var status = await PermissionsMgr.CheckAndRequestStorageWritePermission();
if ( status == PermissionStatus.Unknown )
{
//> 用户拒绝权限
Console.WriteLine("用户拒绝权限");
}
else
{
// 创建目录
Directory.CreateDirectory(workerspaceRoot);
}
}
}
https://developer.android.com/training/data-storage/manage-all-files#all-files-access-google-play
你好,
从Android12 以及以上版本,你将不能从赋予app StorageWrite 权限进而访问外部存储。
您可以 打开 AndroidManifest.xml 并添加 <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
权限.
然后在代码中使用条件编译 去调用Android 平台的代码,弹出一个Snackbar, 让用户点击设置,去赋予MANAGE_EXTERNAL_STORAGE 权限
private void OnCounterClicked(object sender, EventArgs e)
{
#if ANDROID
var activity=Platform.CurrentActivity;
if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.R)
{
if (!Android.OS.Environment.IsExternalStorageManager)
{
Google.Android.Material.Snackbar.Snackbar.Make(activity.FindViewById(Android.Resource.Id.Content), "Permission needed!", Google.Android.Material.Snackbar.Snackbar.LengthIndefinite)
.SetAction("Settings", new MyClickHandler()).Show();
}
}
#endif
}
接下来,你需要为 SnackBar 实现 Android.Views.View.IOnClickListener 接口。它将打开应用程序设置页面;用户需要授予管理器外部权限。
#if ANDROID
internal class MyClickHandler : Java.Lang.Object, Android.Views.View.IOnClickListener
{
public void OnClick(Android.Views.View v)
{
try
{
Android.Net.Uri uri = Android.Net.Uri.Parse("package:" + Platform.CurrentActivity.ApplicationInfo.PackageName);
Android.Content.Intent intent = new Android.Content.Intent(Android.Provider.Settings.ActionManageAppAllFilesAccessPermission, uri);
Platform.CurrentActivity.StartActivity(intent);
}
catch (Exception ex)
{
Android.Content.Intent intent = new Android.Content.Intent();
intent.SetAction(Android.Provider.Settings.ActionManageAppAllFilesAccessPermission);
Platform.CurrentActivity.StartActivity(intent);
}
}
}
#endif
你可以参考这篇的Google文档
如果你带不开上面的文档,这是文档的截图
如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。
注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。