app - 应用
app模块提供一系列函数,用于使用其他应用、与其他应用交互。例如发送意图、打开文件、发送邮件等。
同时提供了方便的进阶函数startActivity和sendBroadcast,用他们可完成app模块没有内置的和其他应用的交互。
要导入此模块,请使用语句const app = require('app');,或者导入本模块的部分函数、属性const { startActivity, packageName } = require('app');。
目录
接口
变量
函数
- editFile
- getApkInfo
- getAppName
- getInstalledApps
- getInstalledPackages
- getPackageName
- getUriForFile
- intentToShell
- launch
- launchApp
- makeIntent
- openAppSettings
- openUrl
- parseUri
- registerBroadcastReceiver
- sendBroadcast
- sendEmail
- startActivity
- startService
- uninstall
- unregisterBroadcastReceiver
- viewFile
变量
packageName
• Const packageName: any
当前应用的包名。
在Auto.js Pro中运行为org.autojs.autojspro,在打包应用中运行为打包应用的包名。
示例
"nodejs";
const { packageName } = require("app");
console.log(packageName);函数
editFile
▸ editFile(file): void
用其他应用编辑文件。文件不存在的情况由编辑文件的应用处理。 如果找不出可以编辑该文件的应用,则抛出ActivityNotException。
示例
"nodejs";
const app = require("app");
app.editFile("/sdcard/1.txt/");参数
| 名称 | 类型 | 描述 |
|---|---|---|
file | string | 文件路径 |
返回值
void
getApkInfo
▸ getApkInfo(file, options?): android.content.pm.PackageInfo | null
解析apk文件并返回包信息。
参见
[PackageManager.getPackageArchiveInfo](https://developer.android.google.cn/reference/android/content/pm/PackageManager#getPackageArchiveInfo(java.lang.String, int))
示例
"nodejs";
const app = require("app");
const info = app.getApkInfo("/path/to/apk", {
get: ['meta_data'],
});
console.log(info.packageName);参数
| 名称 | 类型 | 描述 |
|---|---|---|
file | string | 文件路径 |
options? | PMOptions | 过滤选项 |
返回值
android.content.pm.PackageInfo | null
包信息,若apk无法解析,返回null
getAppName
▸ getAppName(packageName): string | null
获取应用包名对应的已安装的应用的名称。如果该找不到该应用,返回null。
参数
| 名称 | 类型 | 描述 |
|---|---|---|
packageName | string | 应用包名 |
返回值
string | null
应用名称,或者null
getInstalledApps
▸ getInstalledApps(options?): android.content.pm.ApplicationInfo[]
获取安装的应用列表。
返回值是ApplicationInfo对象的数组。 如果没有安装任何应用,则返回一个空数组。
选项options的match选项用于指定要返回哪些应用程序,get选项用于指定返回的应用程序携带哪些信息。
示例
"nodejs";
const app = require("app");
const apps = app.getInstalledApps({
get: ['meta_data'],
match: ['system_only']
});
console.log(apps);参见
PackageManager.getInstalledApplication
参数
| 名称 | 类型 | 描述 |
|---|---|---|
options? | PMOptions | 过滤选项 |
返回值
android.content.pm.ApplicationInfo[]
为当前用户安装的所有应用程序包的列表。如果设置了match选项 uninstalled_packages,则包括被删除但保留了数据的应用程序。
getInstalledPackages
▸ getInstalledPackages(options?): android.content.pm.PackageInfo[]
获取安装的应用列表。
参见
PackageManager.getInstalledPackages
参数
| 名称 | 类型 | 描述 |
|---|---|---|
options? | PMOptions | 过滤选项 |
返回值
android.content.pm.PackageInfo[]
PackageInfo对象的数组。 如果没有安装任何应用,则返回一个空数组。
getPackageName
▸ getPackageName(targetAppName): string | null
获取应用名称对应的已安装的应用的包名。如果该找不到该应用,返回null;如果该名称对应多个应用,则只返回其中某一个的包名。
参数
| 名称 | 类型 | 描述 |
|---|---|---|
targetAppName | string | 应用名称 |
返回值
string | null
名称对应的包名,或者null
getUriForFile
▸ getUriForFile(pathOrUri): android.net.Uri
从一个文件路径创建一个uri对象在高版本Android上,由于系统限制直接在Uri暴露文件的绝对路径,因此返回的Uri会是诸如content://...的形式。
参数
| 名称 | 类型 | 描述 |
|---|---|---|
pathOrUri | string | 文件路径或文件uri,比如"/sdcard/1.txt"或"file:///sdcard/1.txt" |
返回值
android.net.Uri
文件uri,可作为Intent的data属性
intentToShell
▸ intentToShell(options): string
根据选项构造一个Intent,转换为对应的shell的intent命令的参数。
参见
示例
"nodejs";
const { intentToShell } = require("app");
const { exec } = require("shell");
exec("am start " + intentToShell({
packageName: "org.autojs.autojs",
className: "org.autojs.autojs.ui.settings.SettingsActivity_"
}), { root: true});参数
| 名称 | 类型 | 描述 |
|---|---|---|
options | IntentOptions | Intent选项 |
返回值
string
对应的shell的intent命令的参数
launch
▸ launch(packageName): boolean
通过应用包名启动应用。如果该包名对应的应用不存在,则返回false;否则返回true。
**注意!**在高版本Android或部分系统上,会限制通过后台启动应用,也即在后台的情况下即使返回true,也可能没有实际启动该应用。
参见
Restrictions on starting activities from the background
参数
| 名称 | 类型 | 描述 |
|---|---|---|
packageName | string | 要启动的应用包名 |
返回值
boolean
是否找到该应用,并不返回是否真正启动成功
launchApp
▸ launchApp(targetAppName): boolean
通过应用名称启动应用。如果该名称对应的应用不存在,则返回false;否则返回true。如果该名称对应多个应用,将随机启动其中一个。
**注意!**在高版本Android或部分系统上,会限制通过后台启动应用,也即在后台的情况下即使返回true,也可能没有实际启动该应用。
参见
Restrictions on starting activities from the background
参数
| 名称 | 类型 | 描述 |
|---|---|---|
targetAppName | string | 要启动的应用名称 |
返回值
boolean
是否找到该应用,并不返回是否真正启动成功
makeIntent
▸ makeIntent(options): any
根据Intent选项构造一个新的Intent。
Intent(意图) 是一个消息传递对象,您可以使用它从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件之间的通信,但其基本用例主要包括以下三个:
- 启动活动(Activity): Activity 表示应用中的一个"屏幕"。例如应用主入口都是一个Activity,应用的功能通常也以Activity的形式独立,例如微信的主界面、朋友圈、聊天窗口都是不同的Activity。通过将 Intent 传递给 startActivity(),您可以启动新的 Activity 实例。Intent 描述了要启动的 Activity,并携带了任何必要的数据。
- 启动服务(Service): Service 是一个不使用用户界面而在后台执行操作的组件。通过将 Intent 传递给 startService(),您可以启动服务执行一次性操作(例如,下载文件)。Intent 描述了要启动的服务,并携带了任何必要的数据。
- 传递广播: 广播是任何应用均可接收的消息。系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播。通过将 Intent 传递给 sendBroadcast()、sendOrderedBroadcast() 或 sendStickyBroadcast(),您可以将广播传递给其他应用。
需要注意的是,除非应用专门暴露Activity出来,否则在没有root权限的情况下使用intent是无法跳转到特定Activity、应用的特定界面的。例如我们能通过Intent跳转到QQ的分享界面,是因为QQ对外暴露了分享的Activity;而在没有root权限的情况下,我们无法通过intent跳转到QQ的设置界面,因为QQ并没有暴露这个Activity。 但如果有root权限,则在intent的参数加上"root": true即可。例如使用root权限跳转到Auto.js的设置界面为:
"nodejs";
const { startActivity } = require("app");
startActivity({
packageName: "org.autojs.autojspro",
className: "org.autojs.autojs.ui.settings.SettingsActivity",
root: true
});示例
"nodejs";
const app = require("app");
const i = app.makeIntent({
action: "VIEW",
type: "image/png",
data: "file:///sdcard/1.png"
});
$autojs.androidContext.startActivity(i);参数
| 名称 | 类型 | 描述 |
|---|---|---|
options | IntentOptions | 构建Intent的选项 |
返回值
any
新的Intent对象
openAppSettings
▸ openAppSettings(packageName): boolean
打开应用的详情页(设置页)。如果找不到该应用,返回false; 否则返回true。
参数
| 名称 | 类型 | 描述 |
|---|---|---|
packageName | string | 包名 |
返回值
boolean
是否成功打开应用设置页
openUrl
▸ openUrl(url): void
用浏览器打开网站url。 如果没有安装浏览器应用,则抛出ActivityNotException。
参数
| 名称 | 类型 | 描述 |
|---|---|---|
url | string | 网站的Url,需要以"http://"或"https://"开头。 |
返回值
void
parseUri
▸ parseUri(uri): android.net.Uri
解析uri字符串并返回相应的Uri对象。即使Uri格式错误,该函数也会返回一个Uri对象,但之后如果访问该对象的scheme, path等值可能因解析失败而返回null。
在高版本Android上,由于系统限制直接在Uri暴露文件的绝对路径,因此如果uri字符串是文件file://...,返回的Uri会是诸如content://...的形式。
参数
| 名称 | 类型 | 描述 |
|---|---|---|
uri | any | uri字符串或uri对象,后者直接返回uri自身 |
返回值
android.net.Uri
解析后的Uri对象
registerBroadcastReceiver
▸ registerBroadcastReceiver(filter): BroadcastReceiver
注册一个广播接收器,用于接收系统或应用发送的广播。广播接收器可以监听系统事件(如屏幕开启、网络状态变化等)或其他应用发送的自定义广播。
示例
"nodejs";
const { registerBroadcastReceiver, unregisterBroadcastReceiver } = require("app");
// 注册广播接收器,监听屏幕开启事件
const receiver = registerBroadcastReceiver("android.intent.action.SCREEN_ON");
receiver.on("receive", (intent) => {
console.log("屏幕已开启");
console.log("Intent action:", intent.getAction());
});
// 使用完毕后注销接收器
// unregisterBroadcastReceiver(receiver);示例
"nodejs";
const { registerBroadcastReceiver } = require("app");
// 监听多个广播事件
const receiver = registerBroadcastReceiver([
"android.intent.action.SCREEN_ON",
"android.intent.action.SCREEN_OFF"
]);
receiver.on("receive", (intent) => {
const action = intent.getAction();
if (action === "android.intent.action.SCREEN_ON") {
console.log("屏幕开启");
} else if (action === "android.intent.action.SCREEN_OFF") {
console.log("屏幕关闭");
}
});参数
| 名称 | 类型 | 描述 |
|---|---|---|
filter | string | string[] | android.content.IntentFilter | 广播过滤器。可以是单个 action 字符串、action 字符串数组,或 IntentFilter 对象。例如 "android.intent.action.SCREEN_ON" 或 ["android.intent.action.SCREEN_ON", "android.intent.action.SCREEN_OFF"] |
返回值
返回一个 BroadcastReceiver 对象,可以通过 on("receive", listener) 监听接收到的广播。使用完毕后应调用 unregisterBroadcastReceiver() 注销接收器以释放资源。
sendBroadcast
▸ sendBroadcast(target): Promise<void>
根据选项构造一个Intent,并发送该广播。
参见
参数
| 名称 | 类型 | 描述 |
|---|---|---|
target | IntentOptionsWithRoot | 目标广播的名称或者根据Intent选项构造的广播 Intent。若target为字符串,则: * inspect_layout_hierarchy 布局层次分析 * inspect_layout_bounds 布局范围分析 但是这些广播在打包后应用中不可用。 |
返回值
Promise<void>
Promise,如果是使用root权限,则会等待执行shell命令后返回;如果不是使用root权限,则会直接返回。
sendEmail
▸ sendEmail(options): void
启用发送邮件的应用。如果没有安装邮箱应用,则抛出ActivityNotException。
参数
| 名称 | 类型 | 描述 |
|---|---|---|
options | EmailOptions | 邮件发送选项 |
返回值
void
startActivity
▸ startActivity(target): Promise<void>
根据选项构造一个Intent,并启动该Activity。
参见
示例
"nodejs";
const { startActivity } = require("app");
startActivity({
action: "SEND",
type: "text/plain",
data: "file:///sdcard/1.txt"
});参数
| 名称 | 类型 | 描述 |
|---|---|---|
target | "console" | "settings" |
返回值
Promise<void>
Promise,如果是使用root权限,则会等待执行shell命令后返回;如果不是使用root权限,则会直接返回。不管如何,都不会等待Activity启动才返回。
startService
▸ startService(target): Promise<void>
根据选项构造一个Intent,并启动该服务。
参见
参数
| 名称 | 类型 | 描述 |
|---|---|---|
target | IntentOptionsWithRoot | 构造Service Intent的选项 |
返回值
Promise<void>
Promise,如果是使用root权限,则会等待执行shell命令后返回;如果不是使用root权限,则会直接返回。不管如何,都不会等待Service启动才返回。
uninstall
▸ uninstall(packageName): void
卸载应用。执行后会会弹出卸载应用的提示框。如果该包名的应用未安装,由应用卸载程序处理,可能弹出"未找到应用"的提示。
参数
| 名称 | 类型 | 描述 |
|---|---|---|
packageName | string | 包名 |
返回值
void
unregisterBroadcastReceiver
▸ unregisterBroadcastReceiver(receiver): void
注销之前注册的广播接收器。注销后,该接收器将不再接收任何广播。建议在不使用接收器时及时注销以释放资源。
示例
"nodejs";
const { registerBroadcastReceiver, unregisterBroadcastReceiver } = require("app");
const receiver = registerBroadcastReceiver("android.intent.action.SCREEN_ON");
receiver.on("receive", (intent) => {
console.log("收到广播");
});
// 10 秒后注销接收器
setTimeout(() => {
unregisterBroadcastReceiver(receiver);
console.log("广播接收器已注销");
}, 10000);参数
| 名称 | 类型 | 描述 |
|---|---|---|
receiver | BroadcastReceiver | 要注销的 BroadcastReceiver 对象,由 registerBroadcastReceiver() 返回 |
返回值
void
viewFile
▸ viewFile(file): void
用其他应用查看文件。文件不存在的情况由查看文件的应用处理。 如果找不出可以查看该文件的应用,则抛出ActivityNotException。
"nodejs";
const app = require("app");
app.viewFile("/sdcard/1.txt");参数
| 名称 | 类型 | 描述 |
|---|---|---|
file | string | 文件路径 |
返回值
void
