# Intent 界面跳转

从 JSKit 1.10.0-b 版本开始,引入了 intent 模块,开始全面支持 Intent 界面跳转。

提示

这个接口与 ui 模块的 VPage 路由的设计目的不同,需要注意区别。VPage 路由是单一扩展中的界面跳转逻辑;Intent 则可以实现不同扩展,或者是手机上不同 App 界面的跳转。

intent API 是对 Android 平台的 Intent (opens new window) 的简单封装,JSKit App 提供了 Activity 跳转的功能,用来执行界面跳转请求。这个 API 在希望通过 URL Scheme 唤起第三方 App 指定界面时尤其有用。

# Intent 模块概览

declare module 'intent' {
    export type UriType = string | File;
    export interface ClipData {
        label: string;
        mimeTypes: string[];
        data: {
            type: 'text' | 'uri';
            value: string | UriType;
        }
    }
    export default class Intent {
        constructor();
        setAction(action: string): Intent;
        setData(uri: UriType | null, type?: string | null): Intent;
        addCategory(category: string): Intent;
        setComponent(pkg: string, clz: string): Intent;
        putExtraString(key: string, value: string): Intent;
        putExtraInt(key: string, value: number): Intent;
        putExtraBool(key: string, value: boolean): Intent;
        putExtraChar(key: string, value: number): Intent;
        putExtraShort(key: string, value: number): Intent;
        putExtraLong(key: string, value: number): Intent;
        putExtraFloat(key: string, value: number): Intent;
        putExtraDouble(key: string, value: number): Intent;
        putExtraUri(key: string, uri: UriType): Intent;
        setClipData(data: ClipData): Intent;
        addFlags(flags: number): Intent;
        removeFlags(flags: number): Intent;
        startActivity(closeThis?: boolean): void;
        chooseActivity(title: string, closeThis?: boolean): void;
    }
}

一般每个 Intent 必须使用 setAction(action: string)setData(uri: UriType | null, type?: string | null) 提供一个明确的 Action 和 Data;可选的提供 Categories 、Type 、Component 或 Extras;最后调用 startActivity(closeThis?: boolean)chooseActivity(title: string, closeThis?: boolean)

# Intent 详细说明

# 导入 Intent 对象

import Intent from 'intent';

const intent = new Intent();

intent 模块是导出的默认类。

# 设置 Action

setAction(action: string): Intent;

设置 action 并返回当前 Intent 实例。URL Scheme 较常用的 action 是 android.intent.action.VIEW。一些标准的 Action 参考 Intent (opens new window) 中的相关说明,需要注意的是,JSKit App 中使用的是其常数值,比如 ACTION_VIEW (opens new window) Constant Value: "android.intent.action.VIEW"。另外不同的手机 App 界面还可以使用自己定义的各种 action,这些一般只能通过搜索引擎自行获取。

# 设置 data,type extra 等…

setData(uri: UriType | null, type?: string | null): Intent;

设置 data 和 type 并返回当前 Intent 实例。

addCategory(category: string): Intent;
setComponent(pkg: string, clz: string): Intent;
putExtraString(key: string, value: string): Intent;
putExtraInt(key: string, value: number): Intent;
putExtraBool(key: string, value: boolean): Intent;
putExtraChar(key: string, value: number): Intent;
putExtraShort(key: string, value: number): Intent;
putExtraLong(key: string, value: number): Intent;
putExtraFloat(key: string, value: number): Intent;
putExtraDouble(key: string, value: number): Intent;
putExtraUri(key: string, uri: UriType): Intent;
setClipData(data: ClipData): Intent;
addFlags(flags: number): Intent;
removeFlags(flags: number): Intent;

剩余的其他设置 extra 等信息不再赘述,就是根据目标界面的要求设置一些启动界面的额外参数等。

# 启动界面

startActivity(closeThis?: boolean): void;
chooseActivity(title: string, closeThis?: boolean): void;

直接启动界面,或者是选择界面启动,closeThis 传递 true 会在发送启动指令后关闭当前界面。

提示

本 API 需要了解一些 Android 原生开发里的 Intent 跳转知识,不妨搜索引擎了解一点相关信息。有任何意见或建议请联系我们。后期会提供一些 demo 示例展示一些使用场景,还请期待……