作者介绍:铸梦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
}
简简单单,复制粘贴就完事了。