【懒人精灵】小飞侠插件专题——获取安卓设备的屏幕信息

OOP调用例子

-- ============================================
-- 屏幕尺寸获取示例
-- 演示如何使用 XfxPlugin.lua 调用 ScreenOps 获取屏幕信息
-- ============================================

-- 方式一:使用 XfxPlugin.lua 面向对象封装(推荐)
-- ============================================
print('========== 方式一:使用 XfxPlugin.lua 封装 ==========')

-- 加载 XfxPlugin.lua 类
local xfxModule = require('lib/XfxPlugin')

-- 创建 XFX 对象实例
-- 注意:new 方法会自动初始化 Main.init(context),所以可以直接使用 ScreenOps
local XFX = xfxModule:new({
    apkName = 'xfxPlugin-release.apk',  -- APK 文件名
    -- preloadOps 可以预加载常用的 Ops,这里我们手动获取 screenOps
})

-- 方法 1:通过 call 方法调用 ScreenOps 的方法
print('\n--- 通过 call 方法调用 ---')
local ok1, screenWidth = pcall(function()
    return XFX:call('screenOps', 'getScreenWidth')
end)
local ok2, screenHeight = pcall(function()
    return XFX:call('screenOps', 'getScreenHeight')
end)

if ok1 and ok2 then
    print('屏幕宽度: ' .. tostring(screenWidth))
    print('屏幕高度: ' .. tostring(screenHeight))
else
    print('获取屏幕尺寸失败: ' .. tostring(screenWidth or screenHeight))
end

-- 方法 2:直接获取 screenOps 对象,然后调用方法(更直观)
print('\n--- 直接获取 screenOps 对象 ---')
local screenOps = XFX:getOps('screenOps')
if screenOps then
    -- 使用 pcall 捕获可能的初始化错误
    local ok, width = pcall(function() return screenOps.getScreenWidth() end)
    local ok2, height = pcall(function() return screenOps.getScreenHeight() end)

    if not ok or not ok2 then
        print('错误: ' .. tostring(width or height))
        print('提示: ScreenOps 需要先初始化 Main.init(context)')
        print('注意: 如果使用 XfxPlugin.lua,new 方法会自动初始化')
        -- 不 return,继续执行其他示例
    else
        -- 成功获取尺寸,继续获取其他信息
        local appWidth = screenOps.getAppScreenWidth()  -- 应用屏幕宽度(排除状态栏等)
        local appHeight = screenOps.getAppScreenHeight()  -- 应用屏幕高度
        local density = screenOps.getScreenDensity()  -- 屏幕密度
        local densityDpi = screenOps.getScreenDensityDpi()  -- 屏幕 DPI
        local xDpi = screenOps.getScreenXDpi()  -- X 方向 DPI
        local yDpi = screenOps.getScreenYDpi()  -- Y 方向 DPI
        local isLandscape = screenOps.isLandscape()  -- 是否横屏
        local isPortrait = screenOps.isPortrait()  -- 是否竖屏

        print('屏幕宽度: ' .. tostring(width))
        print('屏幕高度: ' .. tostring(height))
        print('应用屏幕宽度: ' .. tostring(appWidth))
        print('应用屏幕高度: ' .. tostring(appHeight))
        print('屏幕密度: ' .. tostring(density))
        print('屏幕 DPI: ' .. tostring(densityDpi))
        print('X 方向 DPI: ' .. tostring(xDpi))
        print('Y 方向 DPI: ' .. tostring(yDpi))
        print('是否横屏: ' .. tostring(isLandscape))
        print('是否竖屏: ' .. tostring(isPortrait))
    end
end

-- 方法 3:结合悬浮日志窗口显示屏幕信息(更友好)
print('\n--- 使用悬浮日志窗口显示 ---')
-- 确保有屏幕尺寸数据
if screenWidth and screenHeight then
    XFX:showFloatLogWindow({
        title = '屏幕信息',
        width = math.floor(screenWidth / 3),
        height = math.floor(screenHeight / 6),
    })
    XFX:setFloatLogTitle('屏幕尺寸信息')
    XFX:logi('宽度: ' .. tostring(screenWidth))
    XFX:logi('高度: ' .. tostring(screenHeight))
    if screenOps then
        local ok, dpi = pcall(function() return screenOps.getScreenDensityDpi() end)
        local ok2, density = pcall(function() return screenOps.getScreenDensity() end)
        if ok then XFX:logi('DPI: ' .. tostring(dpi)) end
        if ok2 then XFX:logi('密度: ' .. tostring(density)) end
    end
else
    print('无法显示悬浮窗:屏幕尺寸获取失败')
end

sleep(5000) 
XFX:closeFloatLog()

直接调用例子

import('com.nx.assist.lua.LuaEngine')

-- ============================================
-- 方式二:直接调用方式(不推荐,但可以了解底层实现)
-- ============================================
print('\n========== 方式二:直接调用方式 ==========')

local loader = LuaEngine.loadApk('xfxPlugin-release.apk')
if not loader then
    print('Failed to load APK')
    return
end

local context = LuaEngine.getContext()
local UtilCodeMain = loader.loadClass('com.xfx.plugin.Main')
if not UtilCodeMain then
    print('Failed to load Class')
    return
end

-- 初始化插件
UtilCodeMain.init(context)

-- 获取 ScreenOps
local screenOps = UtilCodeMain.screenOps()

-- 获取屏幕尺寸
local screenWidth = screenOps.getScreenWidth()
local screenHeight = screenOps.getScreenHeight()
print('屏幕宽度: ' .. tostring(screenWidth))
print('屏幕高度: ' .. tostring(screenHeight))

-- ============================================
-- 实际应用示例:根据屏幕尺寸调整操作
-- ============================================
print('\n========== 实际应用示例 ==========')

if screenWidth and screenHeight then
    print('当前屏幕尺寸: ' .. screenWidth .. ' x ' .. screenHeight)

-- 根据屏幕尺寸判断设备类型
if screenWidth > screenHeight then
    print('当前为横屏模式')
else
    print('当前为竖屏模式')
end

-- 根据屏幕尺寸计算合适的坐标(例如:屏幕中心点)
local centerX = math.floor(screenWidth / 2)
local centerY = math.floor(screenHeight / 2)
print('屏幕中心点: (' .. centerX .. ', ' .. centerY .. ')')

    -- 根据屏幕尺寸计算合适的区域(例如:屏幕右下角 1/4 区域)
    local rightBottomX = math.floor(screenWidth * 3 / 4)
    local rightBottomY = math.floor(screenHeight * 3 / 4)
    print('右下角区域起始点: (' .. rightBottomX .. ', ' .. rightBottomY .. ')')
else
    print('无法获取屏幕尺寸,跳过实际应用示例')
end

print('\n示例执行完成!')
1. 官方交流QQ群,添加多个不批。建议使用安卓手机或电脑申请。
飞云脚本圈: 586333520飞云脚本圈
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » 【懒人精灵】小飞侠插件专题——获取安卓设备的屏幕信息

企业级大数据智能营销管理系统

源码转让