0

我们在生产中使用Soti Mobicontrol Managed Android 设备,由于在 Android 10 之后 IMEI 访问受到限制,我想知道有权访问Android Enterprise功能的 Soti 代理是否可以为我们提供 IMEI,因此我们将其用作设备唯一 ID。

顺便说一句,该公司拥有这些设备,我不认为这侵犯了用户隐私!

4

1 回答 1

1

我在Soti 论坛中找到了一个模糊且不完整的答案,经过多次测试,我终于成功了!!!

当您使用 MobiControl Package Studio工具为 Android APK 文件创建安装包时,您可以包含将在安装完成后运行的安装后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;"

此脚本的行为与此 ADB 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

我希望这个答案可以帮助任何使用此服务的人。

于 2021-06-25T10:40:06.190 回答