system.getInfo()

类型 函数
system.*
返回值 各种
修订 Release 2024.3703
关键词 系统信息

概览

返回应用程序正在运行的系统信息。

语法

system.getInfo( property )
属性 (必需)

字符串. 与所需信息对应的属性名称 - 查看以下参考列表。

常规

appName

“appName”返回应用程序的名称,该名称会显示给最终用户。

appVersionString

“appVersionString”返回应用程序的版本号(字符串格式)。

  • Android — 返回应用程序的版本名称
  • iOS — 返回应用程序的CFBundleVersionString
  • Solar2D Simulator —(不支持)
  • Windows 桌面应用程序 — 返回输入到构建窗口的版本号。

architectureInfo

“architectureInfo”返回描述您正在运行的设备的基础 CPU 架构的字符串。此 API 主要用于内部调试,但可能会有其他用途。字符串可能会根据不断变化的设备和 CPU 环境而更改。

  • ARM 设备上的 Android 将返回 ARM(通常用于 ARMv6)ARM Neon(ARMv7).
  • iOS 将返回 iPhone6,1iPad5,3 等值。
  • macOS 可以返回 i386x86_64ppcppc64
  • Windows 桌面可以返回 x86x64IA64ARM

build

“build”返回 Solar2D Simulator 的关于框中显示的构建字符串。

bundleID

“bundleID”返回应用程序的包/包标识符,如果未应用则返回 nil

darkMode

“darkMode”在支持暗模式的平台上返回 truefalse

deviceID

“deviceID”返回设备的“唯一”ID,但有以下注意事项

  • 在 iOS 上,返回设备 “identifierForVendor” 的 MD5 哈希值。

  • 在 Android 上,如果您的应用程序使用 “android.permission.READ_PHONE_STATE” 权限,则此权限会返回 GSM 手机的 IMEI、CDMA 手机的 MEIDESN 或不是手机的设备的操作系统唯一 ID。如果您的 Android 应用程序没有使用 “android.permission.READ_PHONE_STATE” 权限,则所有设备都将返回操作系统的唯一 ID。请注意,在重新安装后设备上的操作系统,操作系统唯一 ID 可能会更改。

  • 如果你的应用在Android 6或更新安卓设备上使用READ_PHONE_STATE权限且设备是一部手机,用户拒绝该应用PHONE权限可能会更改返回的值system.getInfo( "deviceID" )通过拒绝该应用PHONE权限。从返回的值system.getInfo( "deviceID" )中检索的第一个值将被缓存并在当前应用实例生命周期内使用。要确保在这种情况下你的应用获取的值保持一致,你需要检查是否授予PHONE权限,如果没有授予,就请求权限。有关更多详情,请参见以下示例

environment

"environment"返回应用运行的环境。其中包括

  • Solar2D 模拟器的simulator
  • iOS、Xcode iOS 模拟器、Android 设备、Android 仿真器、macOS 桌面应用以及 Windows 桌面应用的device
  • HTML5 应用的browser

maxTextureSize

"maxTextureSize"返回设备支持的最大纹理宽度或高度。

textureMemoryUsed

"textureMemoryUsed"返回纹理内存使用情况(以字节为单位)。图形/图像的纹理内存往往是移动开发中最受严格限制的资源,因为它先于常规内存耗尽。

manufacturer

"manufacturer"返回设备的制造商。在 Android 上,这会返回android.os.Build.MANUFACTURER的原始值(参考)。示例包括

  • Apple — 返回所有 Apple 设备(iOS、macOS 或 tvOS)。
  • Amazon — 返回所有亚马逊制造的Android 设备、Kindle 平板电脑、Fire TV 和 Fire Phone。
  • samsung — 返回所有三星制造的Android 设备(请注意全小写的samsung.
  • HTC — 返回所有HTC 制造的Android 设备(请注意全大写的HTC.
  • LENOVO — 返回由联想制造的 Windows 笔记本电脑(请注意全大写的LENOVO.

model

"model"返回设备型号(由制造商指定)。请注意,大多数 Android 设备返回型号编号,而不是型号名称。示例包括

  • iPhone
  • iPad
  • Apple TV
  • AFTM(Amazon Fire TV)
  • iPhone Simulator
  • iPad Simulator
  • Droid
  • Galaxy Tab

name

"name"返回可读性模型名称。在 iPhone 上,这将是手机在 iTunes 中显示的名称,例如"Steve's iPhone"。Android 不支持此功能。

platform

"platform"返回操作系统平台标记,该标记可以是:

  • android — 所有 Android 设备和 Android 仿真器。
  • ios — 所有 iOS 设备和 Xcode iOS 模拟器。
  • macos — macOS 桌面应用。
  • tvos — Apple 的 tvOS(Apple TV)。
  • win32 — Win32 桌面应用。
  • html5 — HTML5 应用。
注意

在 Solar2D 模拟器中,返回的值取决于所选的皮肤,这可让你通过更改皮肤来测试与平台相关的逻辑。

platformName

此选项已弃用;请改为使用"platform"(见上文)。

platformVersion

"platformVersion"返回平台版本字符串表示形式。有时它是一个数字,但并非总是如此 — 例如,一台 Droid X 当前返回2.1-update1.

targetAppStore

"targetAppStore"返回应用程序构建时的应用商店名称

  • apple — 始终返回 iOS 和 macOS
  • amazon — 目标是 Amazon 应用商店(仅返回 Android)。
  • google — 目标是 Google Play(仅返回 Android)。
  • windows — 目标是 Windows 应用商店。
  • none — 指示应用程序无针对特定应用程序商店。这始终由 Solar2D Simulator 返回。

Android

androidApiLevel

"androidApiLevel" 返回一个整数,该整数指示应用程序在哪一个 Android 操作系统版本 中运行。例如,API 级别 23指示操作系统版本为 Android 6.0,并且API 级别 21指示操作系统版本为 Android 5.0。

androidAppVersionCode

"androidAppVersionCode" 以数字形式返回应用程序的版本号。在所有其他平台上返回 nil

androidAppPackageName

"androidAppPackageName" 返回应用程序唯一的以点分隔的包名。在所有其他平台上返回 nil

androidGrantedAppPermissions

"androidGrantedAppPermissions" 返回一个包含字符串的表,该字符串表示已请求并授予应用程序的每个应用程序权限。这些权限以标准的 Android 权限名称的形式出现,例如 android.permission.WRITE_EXTERNAL_STORAGEcom.android.vending.BILLING

androidDeniedAppPermissions

"androidDeniedAppPermissions" 返回一个包含字符串的表,该字符串表示已请求但被应用程序拒绝的每个应用程序权限。这些权限以标准的 Android 权限名称的形式出现,例如 android.permission.WRITE_EXTERNAL_STORAGEcom.android.vending.BILLING

grantedAppPermissions

"grantedAppPermissions" 返回一个包含字符串的表,该字符串表示已请求并授予该应用程序的每个应用程序权限。这可能包含以下内容的组合与平台无关应用程序权限名称,例如 Calendars,和标准 Android 权限名称,例如 android.permission.INTERNET

deniedAppPermissions

"deniedAppPermissions" 返回一个包含字符串的表,该字符串表示已请求但被应用程序拒绝的每个应用程序权限。这可能包含以下内容的组合与平台无关应用程序权限名称,例如 Calendars,和标准 Android 权限名称,例如 android.permission.INTERNET

androidDisplayApproximateDpi

"androidDisplayApproximateDpi" 以数字形式返回屏幕的近似 DPI(每英寸点数)。此 DPI 值基于设备分配的密度名称(例如 hdpixhdpi),这些名称提供 Android 上的标准化 DPI 值。此值通常不是显示屏的实际 DPI,而可以通过 "androidDisplayXDpi""androidDisplayYDpi" 获取。

下表列出了将针对每种显示密度类型返回的 DPI 值。在所有其他平台上返回 nil

密度 DPI
ldpi 120
mdpi 160
hdpi 240
xhdpi 320
xxhdpi 480
xxxhdpi 640
tvdpi 213

androidDisplayDensityName

"androidDisplayDensityName" 以字符串形式返回设备的屏幕密度,可以是 ldpimdpihdpixhdpixxhdpixxxhdpitvdpiunknown。在所有其他平台上返回 nil

androidDisplayWidthInInches

"androidDisplayWidthInInches" 以英寸为单位返回应用程序窗口的宽度,相对于应用程序的方向。在所有其他平台上返回 nil

androidDisplayHeightInInches

"androidDisplayHeightInInches" 以英寸为单位返回应用程序窗口的高度,相对于应用程序的方向。在所有其他平台上返回 nil

androidDisplayXDpi

"androidDisplayXDpi" 以 相对于应用程序的方向,沿x 轴返回屏幕的 DPI(每英寸点数)。这可用于将像素转换为英寸,反之亦然。在所有其他平台上返回 nil

androidDisplayYDpi

"androidDisplayYDpi" 返回相对于应用程序方向沿y 轴屏幕的 DPI(每英寸点)。这可用于将像素转换为英寸,反之亦然。在所有其他平台上返回 nil

hasSoftwareKeys

"hasSoftwareKeys" 返回布尔值,如果 Android 设备有软件键(例如,主页键和后退键)而不是物理键,则为 true。在所有其他平台上返回 nil。需要 Solar2D 2023.3686 或更高版本。

iOS / iPadOS / tvOS / macOS

iosIdentifierForVendor

"iosIdentifierForVendor" 返回一个字母数字字符串,它向应用程序的供应商唯一地标识设备。(请参见 Apple 文档)。

reduceMotion

"reduceMotion" 返回布尔值,指示是否启用了“减少运动”系统首选项。(请参见 Apple 文档)需要 Solar2D 2023.3693 或更高版本。

reduceTransparency

"reduceTransparency" 返回布尔值,指示是否启用了“减少透明度”系统首选项。(请参见 Apple 文档)需要 Solar2D 2023.3693 或更高版本。

differentiateWithoutColor

"differentiateWithoutColor" 返回布尔值,指示是否启用了“不带颜色区分”系统首选项。(请参见 Apple 文档)需要 Solar2D 2023.3693 或更高版本。

图形

gpuSupportsHighPrecisionFragmentShaders

"gpuSupportsHighPrecisionFragmentShaders" 返回布尔值,指示该设备上的片段着色器中是否支持 HIGHP

maxVertexTextureUnits

"maxVertexTextureUnits" 返回在该设备上的顶点着色器中可使用的采样器的数量。请参见 自定义着色器效果 指南中的顶点纹理

GL_VENDOR

"GL_VENDOR" 返回负责此设备上 GL 实现的公司。有关详细信息,请 在此处

GL_RENDERER

"GL_RENDERER" 返回 GL 渲染器的名称。有关详细信息,请 在此处

GL_VERSION

"GL_VERSION" 返回 GL 版本。有关详细信息,请 在此处

GL_SHADING_LANGUAGE_VERSION

"GL_SHADING_LANGUAGE_VERSION" 返回 GLSL 着色语言的 GL 版本或发布版本号。有关详细信息,请 在此处

GL_EXTENSIONS

"GL_EXTENSIONS" 返回此设备上支持的扩展列表。有关详细信息,请 在此处

示例

检查应用环境
if ( system.getInfo( "environment" ) == "simulator" ) then
    print( "You're in the Solar2D Simulator." )
end

处理 Android 6 设备 ID
local storedDeviceID = ""

local function hasPhonePermission()

    -- Check to see if the user has previouslly granted permissions
    local grantedPermissions = system.getInfo( "grantedAppPermissions" )
    local hasPhonePermission = false

    -- Check for the "Phone" group permission
    for i = 1,#grantedPermissions do
        if ( "Phone" == grantedPermissions[i] ) then
            hasPhonePermission = true
            break
        end
    end
    return hasPhonePermission
end

local function appPermissionsListener( event )

    local phonePermissionGranted = hasPhonePermission()
    if not phonePermissionGranted then
        -- We can't continue, exit the app
        native.requestExit()
    else
        -- Safe to get the device ID
        storedDeviceID = system.getInfo( "deviceID" )
    end
end

-- This only matters for Android 6 or later
if ( system.getInfo( "platform" ) == "android" and system.getInfo( "androidApiLevel" ) >= 23 ) then

    local phonePermissionGranted = hasPhonePermission()

    if not phonePermissionGranted then
        -- If phone permission is not yet granted, prompt for it
        local permissionOptions =
        {
            appPermission = "Phone",
            urgency = "Critical",
            listener = appPermissionsListener,
            rationaleTitle = "Read phone state required",
            rationaleDescription = "This app needs this state to retrieve previously saved data. Re-request now?",
            settingsRedirectTitle = "Alert",
            settingsRedirectDescription = "Without the ability to access your device's unique ID, it can't function properly. Please grant phone access within Settings."
        }
        native.showPopup( "requestAppPermission", permissionOptions )
    else
        -- We already have the needed permission
        storedDeviceID = system.getInfo( "deviceID" )
    end
end