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

如何使用MAUI读取Android设备上已登录账户的邮箱(如谷歌账户)

如何通过MAUI读取Android设备上的已登录账户邮箱地址?

可以通过MAUI调用Android原生的AccountManager API实现需求,以下是具体操作步骤:

1. 添加必要权限

在Android项目的AndroidManifest.xml中添加账户读取权限:

<uses-permission android:name="android.permission.GET_ACCOUNTS" />

若应用目标为Android 6.0(API级别23)及以上,还需动态申请权限——因为GET_ACCOUNTS属于危险权限,无法仅通过清单声明获取。

2. 编写平台特定代码

MAUI作为跨平台框架,需通过平台特定代码调用Android原生API,推荐两种实现方式:

方式一:条件编译(快速实现)

在共享项目中直接编写带平台判断的代码:

using Android.Accounts;
using Android.Content;

public static List<string> GetGoogleAccountEmails()
{
#if ANDROID
    var accountManager = AccountManager.FromContext(Android.App.Application.Context);
    // 筛选谷歌账户,类型固定为"com.google"
    var googleAccounts = accountManager.GetAccountsByType("com.google");
    return googleAccounts.Select(account => account.Name).ToList();
#else
    return new List<string>();
#endif
}

方式二:依赖服务(符合MAUI架构规范)

  1. 在共享项目定义接口:
public interface IAccountService
{
    List<string> GetGoogleAccountEmails();
}
  1. 在Android项目实现接口:
[assembly: Dependency(typeof(AccountService))]
namespace YourAppNamespace.Platforms.Android;

public class AccountService : IAccountService
{
    public List<string> GetGoogleAccountEmails()
    {
        var accountManager = AccountManager.FromContext(Android.App.Application.Context);
        var googleAccounts = accountManager.GetAccountsByType("com.google");
        return googleAccounts.Select(a => a.Name).ToList();
    }
}
  1. 在共享项目中调用服务:
var accountService = DependencyService.Get<IAccountService>();
var googleEmails = accountService.GetGoogleAccountEmails();

3. 动态申请权限(Android 6.0+)

调用账户读取方法前,需检查并申请权限:

#if ANDROID
const string permission = Android.Manifest.Permission.GetAccounts;
var context = Android.App.Application.Context;
if (ContextCompat.CheckSelfPermission(context, permission) != Android.Content.PM.Permission.Granted)
{
    // 需在MainActivity中保存静态实例,用于权限回调
    ActivityCompat.RequestPermissions(MainActivity.Instance, new[] { permission }, 100);
}
#endif

关键注意事项

  • Android 10(API级别29)及以上,GET_ACCOUNTS权限被废弃,直接读取所有账户的限制更严格,推荐使用AccountManager.NewChooseAccountIntent让用户主动选择账户。
  • 不同类型账户对应不同的类型字符串,如需读取其他账户,替换GetAccountsByType的参数即可(例如微软账户类型为com.microsoft)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 23:48:16