You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Lua中调用Android的Rect类实现多窗口布局?

问题:Lua调用Android Intent打开谷歌地图时,正确创建Rect实例实现多窗口模式的方法

原代码尝试通过Rect(0, 0, 200, 200)创建Android Rect对象,但Lua中没有内置这个函数,导致报错。同时直接将Rect对象传给startActivity的写法也不符合Android API要求,因为该方法的第二个参数是Bundle类型,需要通过ActivityOptions封装Rect参数。

原错误代码:

uri = "https://www.google.com/maps/dir/?api=1&travelmode=driving&origin=50.291793,30.355700&destination=50.400024,30.623489"
local Intent = luajava.newInstance("android.content.Intent")
local Uri = luajava.bindClass("android.net.Uri")

Intent:setAction(Intent.ACTION_VIEW)
Intent:setData(Uri:parse(uri))

Intent:addFlags(bit32.bor(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT, Intent.FLAG_ACTIVITY_NEW_TASK, Intent.FLAG_ACTIVITY_MULTIPLE_TASK))

bundle = Rect(0, 0, 200, 200)

activity:startActivity(Intent, bundle)

正确实现方式

步骤说明

  • 必须通过luajava.newInstance创建Android Rect类的实例,指定完整类路径android.graphics.Rect并传入坐标参数。
  • 使用ActivityOptions类封装Rect参数,将其转换为符合要求的Bundle对象后传给startActivity。

修正后的完整代码

uri = "https://www.google.com/maps/dir/?api=1&travelmode=driving&origin=50.291793,30.355700&destination=50.400024,30.623489"
local Intent = luajava.newInstance("android.content.Intent")
local Uri = luajava.bindClass("android.net.Uri")
-- 1. 正确实例化Android Rect对象
local Rect = luajava.newInstance("android.graphics.Rect", 0, 0, 200, 200)
-- 2. 创建ActivityOptions并设置启动边界
local ActivityOptions = luajava.bindClass("android.app.ActivityOptions")
local options = ActivityOptions:makeBasic()
options:setLaunchBounds(Rect)
-- 3. 将options转换为Bundle传入startActivity
local bundle = options:toBundle()

Intent:setAction(Intent.ACTION_VIEW)
Intent:setData(Uri:parse(uri))

Intent:addFlags(bit32.bor(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT, Intent.FLAG_ACTIVITY_NEW_TASK, Intent.FLAG_ACTIVITY_MULTIPLE_TASK))

activity:startActivity(Intent, bundle)

关键修正点

  • 替换Rect(0,0,200,200)为luajava.newInstance("android.graphics.Rect", 0, 0, 200, 200),通过LuaJava桥接正确实例化Android原生类。
  • 新增ActivityOptions的使用:通过makeBasic()创建基础配置,调用setLaunchBounds()传入Rect设置多窗口启动区域,最后用toBundle()转换为startActivity所需的Bundle参数。

内容的提问来源于stack exchange,提问作者WANDEL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:12:27