更新记录

1.0.0(2026-09-15)

  • 首次发布独立 Android SIM 信息 UTS 插件。
  • 支持读取系统提供的本机 SIM 手机号及号码可用状态。
  • 支持判断当前是否启用双卡,区分启用订阅数量与硬件支持数量。
  • 支持展示卡槽、订阅 ID、运营商及 eSIM 信息。
  • 提供 Vue2、Vue3 两套独立示例工程。

平台兼容性

uni-app(5.26)

Vue2 Vue2插件版本 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
1.0.0 - - - - - - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - - -

葫芦 SIM 信息 UTS

精简Android插件,只提供两个接口:获取本机SIM手机号、判断当前是否启用双卡。独立版本1.0.0,构建 2026-09-15-uts-sim。带普通uni-app Vue2及Vue3两套Demo,不是uni-app x。

插件入口为UTS,Java AAR只使用Android系统API,无第三方运行库、旧UniModule/SDK桩或其他插件依赖。没有拨号、电话监听、短信、联系人、语音、录音文件、前台服务功能,也不上传号码。

集成

hulu-sim 文件夹放到应用 uni_modules。Android最低5.1/API22,工程兼容基线HBuilderX4.27+。UTS入口在utssdk/app-android/index.uts,Java库在libs/hulu-sim-core.aar,config.json无需声明Maven依赖。

使用HBuilderX打开对应Vue2或Vue3 Demo,为它获取自己的appid,制作并安装包含该UTS插件的Android自定义基座。Java/AAR/Manifest变化后仍必须重做基座;仅更新页面不会更新原生库。iOS、Web、小程序、鸿蒙无实现。

Vue2页面示例:

// #ifdef APP-PLUS
import { getPhoneNumber, isMultiSim } from '@/uni_modules/hulu-sim'
// #endif

export default {
  methods: {
    readNumbers() {
      // 在Android App里,由用户点击按钮触发。
      getPhoneNumber(result => {
        if (result.code === 0) console.log(result.data.numbers)
        else console.log(result.message)
      })
    },
    readDualSim() { isMultiSim(result => console.log(result)) }
  }
}

Vue3页面示例:

<script setup>
import { ref } from 'vue'
// #ifdef APP-PLUS
import { getPhoneNumber } from '@/uni_modules/hulu-sim'
// #endif
const resultText = ref('等待查询')
function readNumbers() {
  // #ifdef APP-PLUS
  if (plus.os.name !== 'Android') return
  getPhoneNumber(result => { resultText.value = JSON.stringify(result) })
  // #endif
}
</script>
<template>
  <view><button @tap="readNumbers">获取手机号</button><text>{{ resultText }}</text></view>
</template>

两个接口

均为 method(callback),无参数对象、无持续监听,不需要keepAlive。统一返回 {code,data,message}

code 含义
0 查询成功;号码可能为空,SIM列表也可能为空
-1 系统异常、Activity不可用等
-2 Android版本或设备不支持
-100 权限拒绝、取消或系统禁止读取
-101 同Activity已有查询/权限请求,请等待结束

getPhoneNumber(callback):按系统卡槽顺序返回data.numbers,每项:

字段 含义
number 手机号字符串;系统不提供时为空,不伪造号码
numberAvailable 是否返回了非空号码
numberStatus available可读;unavailable未提供;permission_denied该订阅受系统限制
subId Android订阅ID,不是卡槽编号
slotId 系统卡槽索引从0开始;未知可能为-1;显示第几卡时可加1
displayName 系统SIM显示名称
carrierName 运营商名称
isEmbedded Android9+表示是否eSIM,低版本为null未知

isMultiSim(callback):返回data.isMultiSim,不读取号码。两接口共同返回:

字段 含义
activeSimCount 系统可见的已启用SIM/eSIM订阅数量,按有效订阅ID去重
isMultiSim activeSimCount >= 2
supportedSimCount 系统报告的调制解调器数量;-1未知,见下文
nativeVersion / nativeBuild 用于判断基座是否包含对应AAR

双卡按当前可见启用订阅判断,不是只检测手机是否支持双卡硬件。手机支持两张卡但只启用一张时isMultiSim=false;含两张启用eSIM时可为true。未插卡/无可见订阅时count=0。硬件数量Android11+取getSupportedModemCount,Android6~10取getPhoneCount(系统报告的逻辑电话数量),Android5.1为-1;它不等于物理卡槽的绝对数量。Android可能隐藏某些分组/机会订阅,插件只报告系统允许看到的列表。

权限与读取限制

Manifest仅声明 READ_PHONE_STATEREAD_PHONE_NUMBERS

  • 判断双卡仅按需申请READ_PHONE_STATE,不申请读取号码或通话记录权限。
  • 获取号码申请READ_PHONE_STATE;Android8/API26及以上另需READ_PHONE_NUMBERS。低版本不申请不存在的权限。
  • Android6+动态授权结果由插件自己的无界面Fragment接收;拒绝/取消不会继续读SIM。已授权时直接后台查询。
  • Android13+用SubscriptionManager.getPhoneNumber,旧版本读SubscriptionInfo.getNumber。号码受SIM写入、运营商和系统限制,授权后仍可能为空。

这里只能读取系统提供的本机SIM号码,不能保证每张卡都有号码,也不能用返回值作为用户身份验证或号码归属验证。单卡号码不可读时保留该卡信息;整个订阅列表权限被拒绝时返回错误。插件不读取ICCID、IMSI、短信、通话记录,不发送网络请求。完整宿主应用可能另有权限,与本插件Manifest分开核对。

生命周期与示例

同Activity一次只允许一个查询,权限弹窗和后台查询期间重复调用返回-101。回调一次后自动释放,无额外release接口。Activity销毁关闭未完成回调;只离开页面时Demo会清空页面号码并忽略迟到结果,已发起的系统读取可能继续完成。没有Service、Receiver、监听或后台保活任务。

Vue2 Demo采用data/methods/页面生命周期;Vue3 Demo采用reactive、script setup和onLoad/onUnload。两个Demo内容相同:手机号按钮、双卡按钮、当前启用数量、硬件数量、号码可用性与SIM信息。启动不查询、不申请权限,不写日志/本地持久化手机号。共用页面逻辑保留并发保护和退出清理。

Java/UTS源在独立hulu-sim-uts-java;Demo目录分别hulu-sim-uts-demo-vue2和hulu-sim-uts-demo-vue3。Java源码工程AGENTS.md和PLUGIN_FLOW.md记录维护/迁移/测试,两个Demo也各有AGENTS.md。插件压缩包不包含完整Java源码。

首次版本已做Java构建与分层检查,最终详细结果以源码工程AGENTS为准;新自定义基座、宿主Kotlin链接/DEX/APK及手机SIM/号码/权限体验仍需实测,不把模拟结果作为真机成功。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

1. android.permission.READ_PHONE_STATE 用于读取系统可见的已启用 SIM 订阅信息及判断当前是否启用双卡。 2. android.permission.READ_PHONE_NUMBERS Android 8.0及以上获取本机SIM手机号时按需申请。仅查询是否双卡时不申请此权限。 插件不申请通话记录、短信、拨号、联系人、麦克风、存储或联网权限。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

用户主动发起查询并授权后,本插件读取系统提供的本机SIM手机号、号码可用状态、订阅ID、卡槽索引、SIM显示名称、运营商名称、eSIM标记、启用订阅数量及系统报告的调制解调器数量,用于展示SIM信息和判断当前是否启用双卡。 上述结果仅通过接口回调返回宿主应用。本插件不主动上传数据、不持久化保存号码、不设置数据接收服务器,不接入额外的数据统计或广告SDK。 手机号可能因SIM、运营商或系统限制为空。本插件不读取短信、通话记录、ICCID或IMSI。宿主应用对返回数据的后续处理,由宿主应用自行说明。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无广告

暂无用户评论。