我们在生产中使用的是Soti移动控制管理的安卓设备,由于IMEI访问在Android 10之后受到限制。,我想知道能够访问Android企业功能的Soti代理是否可以为我们提供IMEI,所以我们使用它作为设备唯一的ID。
顺便说一句,公司拥有这些设备,我不认为这是侵犯用户隐私的行为!
发布于 2021-06-25 10:40:06
我在Soti讨论论坛中找到了一个模糊而不完整的答案,经过多次测试,我终于成功了!
当您使用MobiControl package工具为Android文件创建安装包时,您可以包含安装完成后将运行的Post Soti脚本:

其中一个脚本是sendintent,另一方面,您还可以访问一些宏来获取设备信息,即%IMEI%或%DEVICENAME% (在宏文档中没有列出!)。
它意味着通过定义这样的脚本,您可以在Soti托管设备上具有包含IMEI和设备名称的广播消息意图!
sendintent -b "intent:#Intent;action=com.mohsenoid.android.imei.ACTION;S.imei=%IMEI%;S.devicename=%DEVICENAME%;component=com.mohsenoid.android.imei/.ImeiReceiver;end;"此脚本的操作与亚行Shell命令完全相同:
adb shell am broadcast -a com.mohsenoid.android.imei.ACTION --es imei "SOME\ IMEI" --es devicename "SOME\ DEVICE\ NAME" -n com.mohsenoid.android.imei/.ImeiReceiver应用程序中的BroadcastReceiver可以如下所示:
class ImeiReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
context ?: return
intent ?: return
val imei = intent.getStringExtra(IMEI_KEY) ?: return
val deviceName = intent.getStringExtra(DEVICE_NAME_KEY) ?: return
AppSettings.setValue(context, IMEI_KEY, imei)
AppSettings.setValue(context, DEVICE_NAME_KEY, deviceName)
Toast.makeText(context, "Received: IMEI: $imei - DeviceName: $deviceName", Toast.LENGTH_LONG).show()
}
companion object {
const val IMEI_KEY = "imei"
const val DEVICE_NAME_KEY = "devicename"
}
}不要忘记,您还需要添加广播接收器到您的AndroidManifest文件与适当的意图过滤器和行动。
<receiver
android:name=".ImeiReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.mohsenoid.android.imei.ACTION" />
</intent-filter>
</receiver>此GitHub存储库包含一个可用于此目的的测试应用程序:https://github.com/mohsenoid/SOTI-IMEI。
我希望这个答案对任何使用这项服务的人都有帮助。
https://stackoverflow.com/questions/68129641
复制相似问题