Unity 之 代码获取IOS设备型号

举报
陈言必行 发表于 2021/11/10 11:38:38 2021/11/10
【摘要】 两种方式获取IOS设备型号,一种可以根据机型进行处理,另外一种则是按照屏幕比例进行分类,一起来了解一下吧~

一,通过机器型号校验

1.1 逻辑解释

https://www.theiphonewiki.com/wiki/Models上有所有IOS设备型号的代码(最新设备会同步更新),下拉可以看到各种iPhone手机的代码型号,如下图红框:
在这里插入图片描述

找到设备型号后,即可在代码中进行如下逻辑处理

if(SystemInfo.deviceModel.Equals("iPhone13,4"))
{
	 todo... 是iPhone 13 Pro Max 型号设备
}

1.2 实现代码

 #region 校验IPhone机型

    /// <summary>
    /// 当前运行设备型号
    /// -1:默认, 0:正常iph, 1:X系列iph, 2:Ipad
    /// </summary>
    private static int _iphoneDevice = -1;
    
    /// <summary>
    /// Apple苹果设备型号代码deviceModel
    /// 校验当前运行IPhone机型
    /// 0:正常iph, 1:X系列iph, 2:Ipad
    /// </summary>
    /// <returns></returns>
    public static int GetIphoneDevice()
    {
        if (_iphoneDevice != -1) return _iphoneDevice;
 
#if UNITY_EDITOR
        _iphoneDevice = 0;
#elif UNITY_IOS
        string modelStr = SystemInfo.deviceModel;
        string modelType = modelStr.ToLower().Trim().Substring(0, 3);
        if (modelType == "iph")
        {
            // iPhoneX:"iPhone10,3","iPhone10,6"  iPhoneXR:"iPhone11,8"  iPhoneXS:"iPhone11,2"  iPhoneXS Max:"iPhone11,6"
            // iPhone 12Pro "iPhone13,3" iPhone 12Pro "iPhone13,4"
            bool IsIphoneXDevice = modelStr.Equals("iPhone10,3") || modelStr.Equals("iPhone10,6") ||
                                   modelStr.Equals("iPhone11,8") || modelStr.Equals("iPhone11,2") ||
                                   modelStr.Equals("iPhone11,6") || 
                                   modelStr.Equals("iPhone13,3") || modelStr.Equals("iPhone13,4");
            _iphoneDevice = IsIphoneXDevice ? 1 : 0;
        }
        else if (modelType == "ipa")
        {
            //iPad机型
            _iphoneDevice = 2;
        }
        else
        {
            _iphoneDevice = 0;
        }
#else
        _iphoneDevice = 0;
#endif
        //Debug.Log("当前机型ID:" + _iphoneDevice);
        return _iphoneDevice;
    }

缺点:每当有新的型号的手机发布时,都需要手动添加更新一下,否则会出现新机型是x系列的情况,按照正常机型处理的情况。


二,通过长宽比校验

通过设备的长宽比来校验设备型号,长宽比是1.53是Pad,长宽比在1.53f1.9之间,则是正常机型,长宽比大于1.9的都是长屏手机,则都可安装x系列做适配处理

直接上代码:

/// <summary>
/// 当前运行设备型号
/// 0:正常iph, 1:X系列iph, 2:Ipad
/// </summary>
private int platformType = 0;

private void SetScreenType()
{
    float width = Screen.width;
    float height = Screen.height;
    float value = width / height;
    if (value < 1.53f)
    {
        platformType = 2;
    }
    else if (value >= 1.53f && value < 1.9f)
    {
        platformType = 0;
    }
    else
    {
        platformType = 1;
    }
    // todo...各种屏幕设置
    //Screen.autorotateToLandscapeLeft = true;
    //Screen.autorotateToLandscapeRight = true;
    //Screen.autorotateToPortrait = false;
    //Screen.autorotateToPortraitUpsideDown = false;
    //Screen.orientation = ScreenOrientation.AutoRotation;
}
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。