常用函数

说明

工具类模块函数主要是跟Android常用的信息相关联
工具类模块的对象前缀是utils,例如 utils.requestShowLogPermission()这样调用

App相关

utils.isAppExist()

App是否已经安装

@param packageName 应用程序的包名
@return true 代表已经安装,false代表未安装

function main(){ var result = utils.isAppExist("com.xx"); } main();

utils.openApp(packageName)

通过包名打开APP

@param packageName 程序的包名
@return 布尔型 true 代表成功,false 代表失败

function main(){ utils.openApp("com.xx"); } main();

封装一个启动应用函数

let packageName = 'com.ss.android.ugc.aweme'; launch(packageName); /** @description 通过包名启动应用。如果该包名对应的应用不存在,则返回false;否则返回true。 @version 20201125 @author 飞云<283054503@qq.com> @param packageName {string} :应用包名 @param delay {number} :启动后等待时长,单位毫秒。默认5000 @param startNum {number} :重试次数。默认3 @return {boolean}:返回是否成功 */ function launch(packageName, delay, startNum) { let result = false; if (!delay) { delay = 5000; } if (!startNum) { startNum = 3; } if (utils.isAppExist(packageName)) { if (getRunningPkg() === packageName) { logd('应用已经在前台'); result = true; } else { logd('启动应用...'); let selectors = text('允许'); let num = 0; while (num < startNum) { if (getRunningPkg() === packageName) { logi('启动成功'); result = true; break; } else if (has(selectors)) { let node = selectors.getOneNodeInfo(1000); if (node) { node.click() } } else { utils.openApp(packageName); sleep(delay); num++; } } } } else { loge('应用未安装'); } if (result) { logd('应用版本号:' + utils.getAppVersionName(packageName)); } return result; };

utils.openAppByName()

通过名称打开APP

@param appName 程序名称,比如今日头条
@return 布尔型 true 代表成功,false 代表失败

function main(){ utils.openAppByName("xx"); } main();

utils.getApkPkgName()

取得App文件的包名

@param filePath 文件路径
@return 字符串

function main(){ var pkgName = utils.getApkPkgName("/sdcard/app.apk"); } main();

utils.getAppVersionName()

取得已安装的程序的版本字符串标示(版本号)

@param packageName 应用程序的包名
@return 字符串。例如 1.0.0

function main(){ var r = utils.getAppVersionName("com.xx"); } main();

utils.getAppVersionCode()

取得已安装的程序的版本整型标示

@param packageName 应用程序的包名
@return 整型。例如 130600

function main(){ var versionCode = utils.getAppVersionCode("com.xx"); } main();

getRunningPkg()

取得当前运行的App包名

@return {字符串|null}

function main(){ var result = getRunningPkg(); } main();

getRunningActivity()

取得当前运行的Activity类名

@return {字符串|null}

function main(){ var result = getRunningActivity(); } main();

Activity

utils.openActivity()

打开一个activity,通过map参数

@param map 例如{“action”:""},key的固定只有
action: 标准的android action字符串
uri: uri可以是http网址,也可以是文件file:///地址,也可以是 URLSchema语法
type: uri对应的type,等同于MIME类型,例如安装apk包的type是 application/vnd.android.package-archive
pkg: 要打开的activity对应的包名
className: 要打开的 className 对应的类名
flag: androi打开activity 标准的flag标志位,特殊情况下可以填写

其他的都是属于intent参数了

@return 布尔型 true 代表成功,false 代表失败

function main(){ //打开安装包界面 var m ={ "action":"android.intent.action.VIEW", "uri":"file:///sdcard/a.apk", "type":"application/vnd.android.package-archive" }; var x = utils.openActivity(m); logd("x "+x); var map={ "uri":"xx://xx/live/6701887916223941379", }; utils.openActivity(map); } main();

以下非官方例子

浏览图片

importPackage(android.content) var m = { "action": "android.intent.action.VIEW", "uri": "file:///sdcard/ad1.png", "type": "image/*", "flag": android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION | android.content.Intent.FLAG_ACTIVITY_NEW_TASK }; var x = utils.openActivity(m); logd(x);
// 打开抖音用户主页 var x = utils.openActivity({ "uri": "snssdk1128://user/profile/98726798113", }); logd(x);
// 打开指定网址 var m = { "action": "android.intent.action.VIEW", "uri": "http://www.feiyunjs.com", }; var x = utils.openActivity(m); sleep(3000); logd(x);

utils.openIntentAction()

通过Action打开某个界面

@param action action动作,例如 android.settings.ACCESSIBILITY_SETTINGS = 辅助功能,
如果改方法不满足要求,可以直接使用intent进行打开:
常用的action有:

  • android.settings.ACCESSIBILITY_SETTINGS //辅助功能
  • android.settings.ADD_ACCOUNT_SETTINGS //添加账户
  • android.settings.AIRPLANE_MODE_SETTINGS //系统设置首页
  • android.settings.APN_SETTINGS //APN设置
  • android.settings.APPLICATION_SETTINGS //应用管理
  • android.settings.BATTERY_SAVER_SETTINGS //节电助手
  • android.settings.BLUETOOTH_SETTINGS //蓝牙
  • android.settings.CAPTIONING_SETTINGS //字幕
  • android.settings.CAST_SETTINGS //无线显示
  • android.settings.DATA_ROAMING_SETTINGS //移动网络
  • android.settings.DATE_SETTINGS //日期和时间设置
  • android.settings.DEVICE_INFO_SETTINGS //关于手机
  • android.settings.DISPLAY_SETTINGS //显示设置
  • android.settings.DREAM_SETTINGS //互动屏保设置
  • android.settings.HARD_KEYBOARD_SETTINGS //实体键盘
  • android.settings.HOME_SETTINGS //应用权限,默认应用设置,特殊权限
  • android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS //忽略电池优化设置
  • android.settings.INPUT_METHOD_SETTINGS //可用虚拟键盘设置
  • android.settings.INPUT_METHOD_SUBTYPE_SETTINGS //安卓键盘语言设置(AOSP)
  • android.settings.INTERNAL_STORAGE_SETTINGS //内存和存储
  • android.settings.LOCALE_SETTINGS //语言偏好设置
  • android.settings.LOCATION_SOURCE_SETTINGS //定位服务/位置信息设置
  • android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS //所有应用
  • android.settings.MANAGE_APPLICATIONS_SETTINGS //应用管理
  • android.settings.MANAGE_DEFAULT_APPS_SETTINGS //与ACTION_HOME_SETTINGS相同
  • android.settings.action.MANAGE_OVERLAY_PERMISSION //在其他应用上层显示,悬浮窗
  • android.settings.MANAGE_UNKNOWN_APP_SOURCES //安装未知应用 安卓8.0
  • android.settings.action.MANAGE_WRITE_SETTINGS //可修改系统设置 权限
  • android.settings.MEMORY_CARD_SETTINGS //内存与存储
  • android.settings.NETWORK_OPERATOR_SETTINGS //可用网络选择
  • android.settings.NFCSHARING_SETTINGS //NFC设置
  • android.settings.NFC_SETTINGS //网络中的 更多设置
  • android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS //通知权限设置
  • android.settings.NOTIFICATION_POLICY_ACCESS_SETTINGS //勿扰权限设置
  • android.settings.ACTION_PRINT_SETTINGS //打印服务设置
  • android.settings.PRIVACY_SETTINGS //备份和重置
  • android.settings.SECURITY_SETTINGS //安全设置
  • android.settings.SHOW_REGULATORY_INFO //监管信息
  • android.settings.SOUND_SETTINGS //声音设置
  • android.settings.SYNC_SETTINGS //添加账户设置
  • android.settings.USAGE_ACCESS_SETTINGS //有权查看使用情况的应用
  • android.settings.USER_DICTIONARY_SETTINGS //个人词典
  • android.settings.VOICE_INPUT_SETTINGS //辅助应用和语音输入
  • android.settings.VPN_SETTINGS //VPN设置
  • android.settings.VR_LISTENER_SETTINGS //VR助手
  • android.settings.WEBVIEW_SETTINGS //选择webview
  • android.settings.WIFI_IP_SETTINGS //高级WLAN设置
  • android.settings.WIFI_SETTINGS //选择WIFI,连接WIFI
  • com.android.settings.Settings$DevelopmentSettingsActivity

@return {null|boolean|*}

//打开无障碍设置页面 function main(){ utils.openIntentAction("android.settings.ACCESSIBILITY_SETTINGS"); } main();

直接使用Intent打开方式

// 打开应用详情页面 // let packageName = 'com.ss.android.ugc.aweme' let packageName = getRunningPkg() importClass(android.content.Intent); importClass(android.net.Uri) var intent = new Intent(); intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS"); intent.setData(Uri.parse("package:" + packageName)) intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); try { context.startActivity(intent); sleep(3000); } catch (e) { loge(e) }

以下非官方例子

//打开微信扫一扫 importClass(android.content.Intent); importClass(android.net.Uri); importClass(android.content.ComponentName); var intent = new Intent(); intent.setComponent(new ComponentName("com.tencent.mm", "com.tencent.mm.ui.LauncherUI")); intent.putExtra("LauncherUI.From.Scaner.Shortcut", true); intent.setAction("android.intent.action.VIEW"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); try { context.startActivity(intent); sleep(5000); } catch (e) { loge(e) }

文件库

utils.insertImageToAlbum()

将图片插入到相册中,此方法会立刻更新相册数据

@param path 图片路径

function main(){ utils.insertImageToAlbum("/sdcard/a.png"); } main();

utils.insertVideoToAlbum()

将视频插入到相册中,此方法会立刻更新相册数据

@param path 视频路径

function main(){ utils.insertVideoToAlbum("/sdcard/a.mp4"); } main();

剪贴板

utils.setClipboardText(content)

设置剪贴板文本

@param content 文本
@return boolean

function main(){ var r = utils.setClipboardText("com.xx"); toast("设置结果:"+r); } main();

utils.getClipboardText()

读取剪贴板文本

@return string

function main(){ var r = utils.getClipboardText(); toast("读取结果:"+r); } main();

其他

utils.readConfigInt()

读取JSON中的整型数据

@param jsonObject JSON对象
@param key 配置项目
@return 整型,找不到就返回0

function main(){ var testData = utils.readConfigInt(jsonObject,"test_key"); } main();

utils.readJSONString()

读取JSON中的字符串数据

@param jsonObject JSON对象
@param key 配置项目
@return 字符串 找不到就返回空字符串

function main(){ var testData = utils.readConfigString(jsonObject,"test_key"); } main();

utils.isObjectNull()

判断一个对象为空

@param o 对象
@return true或者false

function main(){ var isNull = utils.isObjectNull("test_key"); } main();

utils.isObjectNotNull()

判断一个对象不为空

@param o 对象
@return true或者false

function main(){ var isNull = utils.isObjectNotNull("test_key"); } main();

utils.getRatio()

取得比例,例如10参数,就是返回10%的比例,如果是true,说明随机比例正确,否则不正确
@param ratio 浮点型 1-100
@return true或者false

function main(){ var ratio = utils.getRatio(20f); toast(ratio); } main();

utils.getRangeInt()

取得某个范围的随机值
@param min 最小值
@param max 最大值
@return 在min和max中间的值,包含最大和最小值

function main(){ var value = utils.getRangeInt(1,100); toast(value); } main();

utils.isTrue()

判断布尔型对象是否为真
@param r 布尔型对象
@return true 或者 false

function main(){ var value = utils.isTrue(true); } main();

utils.fileMd5()

文件的MD5

@param file 文件路径
@return 文件MD5字符串或者null

function main(){ var md5 = utils.fileMd5("/sdcard/a.txt"); } main();

utils.dataMd5()

数据计算出来的MD5

@param data 数据
@return 数据MD5字符串或者null

function main(){ var md5 = utils.dataMd5("data"); } main();

utils.randomInt()

随机整型数据

@param length 位数,要随机产生多少位的整型数据
@return 整型

function main(){ var r = utils.randomInt(2); } main();

utils.randomCharNumber()

取得随机的数字和字母

@param length 长度
@return 字符串数字混合

function main(){ var r = utils.randomCharNumber(2); } main();

JSON处理

JSON.stringify(object)

格式化对象为JSON字符串

@param 对象

function main(){ var m ={"sss":"a"}; var d =JSON.stringify(m); logd(d); } main();

JSON.parse(string)

格式化JSON字符串为对象

@param 字符串

var m = {"sss": "a"}; if (!empty(m)) { var d = JSON.stringify(m); d = JSON.parse(d); logd(d); } else { loge('内容为空,无法转换'); } // 判断值是否为空 function empty(value) { switch (typeof value) { case 'undefined': return true; case 'string': if (value.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, '').length == 0) return true; break; case 'boolean': if (!value) return true; break; case 'number': if (0 === value || isNaN(value)) return true; break; case 'object': if (null === value || value.length === 0) return true; for (var i in value) { return false; } return true; } return false; }

编码转换

以下非官方文档内容

菜鸟教程:JavaScript 全局函数
JavaScript 之url转义

encodeURI(uri)

把字符串作为 URI 进行编码

对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:
, / ? : @ & = + $ #
(可以使用 encodeURIComponent() 方法分别对特殊含义的 ASCII 标点符号进行编码。)

@param uri 必需。一个字符串,含有 URI 或其他要编码的文本。

提示:(通用资源标识符:UniformResourceIdentifier,简称"URI")。

var uri="my test.php?name=ståle&car=saab"; logd(encodeURI(uri));

decodeURI(uri)

对 encodeURI() 函数编码过的 URI 进行解码

@param uri 必需。一个字符串,含有要解码的 URI 或其他要解码的文本。

var encodedData = encodeURI('你好,飞云;/?:@&=+$,#'); // encode a string logd(encodedData); var decodedData = decodeURI(encodedData); // decode the string logd(decodedData);

encodeURIComponent(uri)

把字符串作为 URI 进行编码

该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ’ ( ) 。

其他字符(比如 :;/? : @ & = + $ , # 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。

@param uri 必需。一个字符串,含有 URI 或其他要编码的文本。

decodeURIComponent(uri)

对 encodeURIComponent() 函数编码过的 URI 进行解码

@param uri 必需。一个字符串,含有要解码的 URI 或其他要解码的文本。