意图与跨窗口传递消息

在安卓开发中,意图 主要用于执行某个系统动作(动机),例如:启动手机中安装的第三方、其它APP,或者在程序中启动一个后台服务。

意图的常用动作

ACTION_MAIN

  • 常量值:android.intent.action.MAIN

  • 用途:应用的主入口点,通常用于启动应用的主界面。

ACTION_VIEW

  • 常量值:android.intent.action.VIEW

  • 用途:根据 URI 显示数据,例如打开网页、查看图片等。

ACTION_SEND

  • 常量值:android.intent.action.SEND

  • 用途:分享文本、图片等内容。

ACTION_DIAL

  • 常量值:android.intent.action.DIAL

  • 用途:打开拨号界面并显示号码。

ACTION_IMAGE_CAPTURE

  • 常量值:android.media.action.IMAGE_CAPTURE

  • 用途:启动相机应用拍照。

ACTION_PICK

  • 常量值:android.intent.action.PICK

  • 用途:从内容提供者中选择数据,例如选择联系人、图片等。

ACTION_SEARCH

  • 常量值:android.intent.action.SEARCH

  • 用途:执行搜索操作。

ACTION_BOOT_COMPLETED

  • 常量值:android.intent.action.BOOT_COMPLETED

  • 用途:系统启动完成后发送广播。

ACTION_SETTINGS

  • 常量值:android.settings.SETTINGS

  • 用途:打开系统设置界面。

在程序中使用意图

1.启动系统浏览器打开网页

事件 按钮1.被单击(来源对象 为 视图)
    变量 意图1 = 创建 意图()
    ' 设置当前意图的具体动作,常用动作可参考官方文档
    ' 这里指定当前意图1的动作为:打开一个系统视图浏览网页
    意图1.动作 = "android.intent.action.VIEW"
    意图1.置数据("http://www.vcnstudio.com") 
    启动意图(意图1)
结束 事件

2.启动手机中安装的其它APP

事件 按钮2.被单击(来源对象 为 视图)
    变量 意图1 = 创建 意图()
    ' 启动雷电模拟器中的谷歌浏览器
    意图1.置自定义启动类("com.android.chrome","com.google.android.apps.chrome.Main")
    启动意图(意图1)
结束 事件

3.调用系统分享内容

事件 按钮3.被单击(来源对象 为 视图)
    变量 意图1 = 创建 意图()
    意图1.取原生对象().setType("text/plain")
    意图1.取原生对象().putExtra(android.content.Intent.EXTRA_TEXT, "具体要分享的内容")
    取应用上下文().startActivity(android.content.Intent.createChooser(意图1.取原生对象(), "分享到"))
结束 事件

4.启动后台服务

详见安装包内自带安卓例程:后台服务例程

事件 按钮3.被单击(来源对象 为 视图)
    变量 意图1 = 创建 意图()
    ' Ser2 为后台服务代码文件名称
    意图1.置启动类("Ser2")
    意图1.添加数据("city","成都")
    意图1.添加数据("sw","off")    
    启动服务By意图(意图1)
结束 事件

跨窗口传递消息

在轻语言安卓程序中,跨窗口传递消息可以使用多种方式:

事件 按钮1.被单击(来源对象 为 视图)
    保存对象("key1","数据值1")
    保存设置("long-key2","持久化储存设置的数据值")
    切换窗口(创建 窗口2())
结束 事件

事件 按钮2.被单击(来源对象 为 视图)
    ' 先创建一个局部的窗口对象
    变量 局_窗口2 = 创建 窗口2()
    ' 窗口2 中自定义了一个变量;为其设置数据值
    局_窗口2.数据值 = "主窗口按钮2被单击时设置的数据值"
    ' 再切换到窗口2中
    切换窗口(局_窗口2)
结束 事件

事件 按钮3.被单击(来源对象 为 视图)
    公用模块1.全局标记 = "公用模块数据:欢迎使用VcnStudio开发工具"
    ' 注意这里切换时重新创建的窗口对象
    切换窗口(创建 窗口2())
结束 事件

事件 按钮4.被单击(来源对象 为 视图)
    ' 上面的方法在传递数据时都需要先设置数据再切换窗口
    ' 如果需要当切换到窗口2时,还可以实时或延时接收其它地方传递的数据则需要使用消息事件
    延时执行(()->{
        发送事件消息(1,"切换到窗口2后,等待2秒传递的数据值:123890")
    },2000)
    切换窗口(创建 窗口2())
结束 事件

接收数据:

' 由外部设置(通过本窗口对象)
变量 数据值 为 文本型

事件 窗口创建完毕()
    ' 读取从其它窗口传递过来的数据
    标签1.追加文本行("key1:" + 读取对象("key1"))
    标签1.追加文本行("long-key2:" + 读取设置("long-key2"))
    ' 接收延时传递的数据
    接收事件消息((消息ID,消息值)->{
        标签1.追加文本行("消息ID:" + 消息ID + ",消息值:" + 消息值)
    })
结束 事件

事件 窗口切换完毕()
    ' 通过方式二传递的数据、只能在窗口切换完毕中获取
    标签1.追加文本行("方式二:" + 数据值)
    ' 读取公用模块的值(建议在窗口切换完毕中读取)
    标签1.追加文本行("方式三:" + 公用模块1.全局标记)
结束 事件