我正在Android中开发一个应用程序,该应用程序需要将一些AT commands
发送到调制解调器。
这些命令包括提取IMEI号码、迭代可用网络和设置APN
详细信息。
我有这个软件的Windows(c#)版本,所以我熟悉需要发送的命令,但在Windows中,我可以简单地打开相关的Serial Port
并发送命令。
编辑:
我发现TelephonyManager
API 暴露了调制解调器的一些功能
TelephonyManager telMgr = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
String SerNum= telMgr.getSimSerialNumber();
String IMEI= telMgr.getDeviceId();
String Operator= telMgr.getSimOperatorName();
这有很大帮助,但似乎没有手动设置网络运营商/提供商的方法。。这是我最需要的东西。
根据这位同事的说法,没有公共的API可以做你想做的事情,根据我在Android中使用各种调制解调器的经验,以及TelephonyManager页面什么都没有的事实,我倾向于相信这一点。
您可能能够使用反射来访问非公共方法(类似于WiMax管理的方式,这里的一个例子),但这可能不适用于所有设备/OS版本,并且出于安全目的,您可能还需要root才能使这样的事情工作。
我开发了一个定制的系统,并集成了一个GSM调制解调器。我建议您使用logcat启用并查看"radio"日志。从中可以学到很多东西(至少我学到了)。有一个包含APN列表的配置文件,当连接时,你会看到它在寻找"首选APN"。在我的系统中,它就是那个文件中的APN。由于几乎没有关于如何在Android中玩较低级别的信息(信息仅在应用程序级别提供),我使用(并牺牲了)一些"现成"的系统来研究它的工作原理,然后为我的自定义系统进行定制。电话周围的区域似乎是不同制造商/运营商添加自己口味的地方之一,因为我可以注意到相同Android版本(Froyo、姜饼等)的每个系统的差异。不幸的是,这不是一个直接的答案,但我希望这一点信息可以帮助。
此外,还有一个关于尝试将AT命令直接发送到调制解调器的小警告。RIL不断地与调制解调器交互,并来回管理AT命令。它会因为收到一些它不知道发送的命令的答案而感到不安。RIL不断检查信号强度和一堆东西,并管理来自调制解调器的所有未经请求的消息,这些消息可能需要RIL或Android/连接管理器采取行动。