Unity 获取Andorid和IOS手机运营商IMSI

作者介绍:铸梦xy。IT公司技术合伙人,IT高级讲师,资深Unity架构师,铸梦之路系列课程创始人。

目录

在项目开发中,获取运营商也是很常见的功能。但是Unity并没有提供获取运营商的接口,需要我们在Andorid和IOS底层进行编写。

下面是获取运营商的接口,区分Andorid 和IOS

1.Andorid获取运营商

    public static String getNetWorkOperatorName(){
    
    

        TelephonyManager tm = (TelephonyManager) mActivity.getSystemService(Context.TELEPHONY_SERVICE);
        String operator = "";
        try {
    
    
            if (tm !=null){
    
    
                operator = tm.getNetworkOperatorName();
            }
        }catch (Exception e){
    
    
            e.printStackTrace();
        }
        return operator;
    }

2.IOS获取运营商

//  PluginMsgHandler.mm
//  Unity-iPhone
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import <CoreTelephony/CTCarrier.h>

UIViewController* UnityGetGLViewController();

BOOL isBlankString( NSString * string)  {
    
    //判断字符串是否为空 方法

    if (string == nil || string == NULL) {
    
    
        return YES;
    }
    if ([string isKindOfClass:[NSNull class]]) {
    
    
        return YES;
    }
    if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0) {
    
    
        return YES;
    }
    return NO;
}

extern "C" {
    
    

    char* GetCarrierName()//获取运营商
    {
    
    
        CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];
        CTCarrier *carrier = nil;
        if (@available(iOS 12.1, *))
        {
    
    
           NSDictionary *dic = [info serviceSubscriberCellularProviders];
           if (dic.allKeys.count)
           {
    
    
               carrier = [dic objectForKey:dic.allKeys[0]];
               if (isBlankString([carrier carrierName])&&dic.allKeys.count>=2)
               {
    
    
                   carrier = [dic objectForKey:dic.allKeys[1]];
               }
           }
        }
        else
        {
    
    
           carrier = [info subscriberCellularProvider];
        }

       if(isBlankString([carrier carrierName]))  //没有卡返回##
       {
    
    
           return  gCopyString([@"##" UTF8String]);
       }
        return gCopyString([[carrier carrierName] UTF8String]);
    }
}

3.Unity 调用参考

    [DllImport("__Internal")]
    private static extern string GetCarrierName();
    /// <summary>
    /// 获取运营商
    /// </summary>
    public static string GetOperators()
    {
    
    

#if UNITY_IOS && !UNITY_EDITOR
         return GetCarrierName();
#elif UNITY_ANDROID && !UNITY_EDITOR
        AndroidJavaObject _ajc = new AndroidJavaObject("com.xxxx.xxxxActivity");
        return _ajc.CallStatic<string>("getNetWorkOperatorName");
#else
        return "";
#endif
    }
    

简简单单,复制粘贴就完事了。

猜你喜欢

转载自blog.csdn.net/qq_42461824/article/details/117111184