You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAUI中如何访问Android设备已存储账户并检查登录邮箱?

解决MAUI中获取设备登录邮箱为空的问题

你的代码返回空列表主要是因为Android权限限制和API版本适配问题,以下是具体解决步骤:

1. 配置必要权限

在Android项目的AndroidManifest.xml中添加权限声明:

<!-- 基础账户访问权限 -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />

<!-- Android 11+ 需添加查询账户的intent过滤 -->
<queries>
    <intent>
        <action android:name="android.accounts.AccountAuthenticator" />
        <data android:scheme="content" />
    </intent>
</queries>

2. 适配Android API版本,使用正确的账户查询方法

Android 10(API 29)开始,AccountManager.GetAccounts()被废弃且不再返回所有账户,需改用按账户类型查询的方法:

var emails = new List<string>();
var manager = Android.Accounts.AccountManager.Get(Platform.CurrentActivity);

// 示例:获取Google类型的账户(常见邮箱类型)
var accounts = manager.GetAccountsByType("com.google");
foreach (var acc in accounts)
{
    emails.Add(acc.Name);
}

常见账户类型参考:

  • Google邮箱:com.google
  • 微软Outlook/Hotmail:com.microsoft
  • 三星账户:com.samsung.android.account

如果需要查询所有类型账户,Android 11+需要MANAGE_ACCOUNTS系统权限(普通应用无法申请),因此建议明确指定目标账户类型。

3. 动态申请权限

GET_ACCOUNTS属于危险权限,需在运行时动态申请:

// 方式1:使用MAUI权限API
var permissionStatus = await Permissions.RequestAsync<Permissions.ContactsRead>();
if (permissionStatus != PermissionStatus.Granted)
{
    // 提示用户授权
    return;
}

// 方式2:Android原生权限申请(更直接)
var context = Platform.CurrentActivity;
if (AndroidX.Core.Content.ContextCompat.CheckSelfPermission(context, Android.Manifest.Permission.GetAccounts) != Android.Content.PM.Permission.Granted)
{
    AndroidX.Core.App.ActivityCompat.RequestPermissions(context, new[] { Android.Manifest.Permission.GetAccounts }, 1001);
}

需在权限申请通过后再执行账户查询逻辑。

4. 额外测试注意事项

  • 确保设备已登录目标类型的账户(比如测试Google账户时,设备需登录Google账号);
  • 部分国产ROM会限制应用访问账户信息,需在系统设置中允许当前应用获取账户权限。

内容的提问来源于stack exchange,提问作者primix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 00:45:14