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

基于.NET 6的MAUI应用获取移动运营商名称:MAUI Essentials及原生API可行吗?

检测移动运营商名称的实现方案(.NET MAUI)

一、MAUI Essentials 支持情况

目前MAUI Essentials没有提供直接获取移动运营商名称的跨平台API,需要通过调用iOS/Android的原生API来实现。

二、Android 原生实现方案

1. 权限配置

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

<!-- Android 10及以上版本需要 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

注意:Android 6.0及以上版本需要动态申请READ_PHONE_STATE权限,否则会触发权限异常。

2. 代码实现

通过MAUI依赖服务封装原生逻辑:

// 定义跨平台接口
public interface ICarrierService
{
    string GetCarrierName();
}

// Android平台实现类
[assembly: Dependency(typeof(AndroidCarrierService))]
namespace YourApp.Platforms.Android
{
    public class AndroidCarrierService : ICarrierService
    {
        public string GetCarrierName()
        {
            var telephonyManager = (TelephonyManager)Android.App.Application.Context.GetSystemService(Context.TelephonyService);
            
            // 检查权限是否已授予
            if (ContextCompat.CheckSelfPermission(Android.App.Application.Context, Manifest.Permission.ReadPhoneState) != Permission.Granted)
            {
                return "权限未授予";
            }
            
            // 优先获取当前网络运营商名称,无结果则取SIM卡运营商名称
            var networkCarrier = telephonyManager.NetworkOperatorName;
            if (!string.IsNullOrEmpty(networkCarrier))
                return networkCarrier;
            
            var simCarrier = telephonyManager.SimOperatorName;
            return string.IsNullOrEmpty(simCarrier) ? "未知运营商" : simCarrier;
        }
    }
}

MAUI项目中调用示例:

var carrierService = DependencyService.Get<ICarrierService>();
var carrierName = carrierService.GetCarrierName();

三、iOS 原生实现方案(含iOS 16 权限调整)

1. iOS 16 权限变化

iOS 16及以后,苹果对运营商信息获取做了严格限制:

  • 必须在Info.plist中添加NSCellularNetworkUsageDescription键,说明应用获取蜂窝网络信息的用途,否则应用会被拒绝上架。
  • 用户需要在系统设置中为应用开启“蜂窝网络”权限,否则CTCarrier.CarrierName会返回null。
  • 仅当应用处于前台且设备连接蜂窝网络时,才能正常获取运营商名称。

2. 权限配置

在iOS项目的Info.plist中添加:

<key>NSCellularNetworkUsageDescription</key>
<string>需要获取运营商信息以提供对应服务</string>

3. 代码实现

通过依赖服务封装原生逻辑:

// 跨平台接口同Android部分
[assembly: Dependency(typeof(IOSCarrierService))]
namespace YourApp.Platforms.iOS
{
    public class IOSCarrierService : ICarrierService
    {
        public string GetCarrierName()
        {
            var networkInfo = new CTTelephonyNetworkInfo();
            var carriers = networkInfo.ServiceSubscriberCellularProviders;
            
            if (carriers == null || carriers.Count == 0)
                return "未知运营商";
            
            // 双卡设备可遍历所有运营商,此处取第一个可用结果
            var carrier = carriers.First().Value;
            return string.IsNullOrEmpty(carrier.CarrierName) ? "未知运营商" : carrier.CarrierName;
        }
    }
}

注意:iOS 16及以上版本,若用户未授权权限,carrier.CarrierName会返回空字符串,建议在调用前检查权限状态,引导用户开启权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:10:02