大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
android 电话服务就是通过AT来实现的,不过不是java应用层直接发AT
创新互联建站专注于企业成都全网营销推广、网站重做改版、项城网站定制设计、自适应品牌网站建设、H5建站、成都商城网站开发、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为项城等各大城市提供网站开发制作服务。
而是通过socket,把命令发到RIL层,RIL筛选AT命令,与底层交互,实现电话的各个功能
你可以查一查RIL的实现
AT命令(Attention)在手机中,用于对modem(也就是移动模块)通过串口命令进行操作,处理与语音电话、短信和数据。
关于AT命令:
Android系统与AT命令
对于智能手机,AP和BP分离的情况,在AP上的系统通过串口和BP通信是个不错方式。在Android的源码中有一个内部包com.android.internal.telephony中有对AT命令的封装和解析,但这种internal的包开发者不能调用的SDK部分,可以用来封装ROM。这说明Android对AT command的方式是支持的。
对于Android如何调用AT command
用root登录命令行,直接对串口进行操作,如echo -e "AT\r" /dev/smd0
具体的串口,不同设备会有不同,甚至不一定会提供。这种方式,开发者是可以调用的,通过Runtime.exec直接执行命令行命令,但要求是root,例如echo -e "ATD123456789;\r" /dev/smd0,拨打123456789的号码。
目前最新的AT命令标准发布与2014.6.27,似乎还活得挺滋润的。但是给出的keywords是UMTS, GSM, command, terminal, LTE这说明CDMA确实很可能不是采用AT命令的方式。
一、准备测试环境及测试文件
1、安装Java JDk,设置好环境变量
2、安装Android SDK,设置好环境变量(详细步骤略)
3、准备被测apk及测试所需的一些工具
二、启动模拟器,并解锁
批处理脚本:
emulator -avd Galaxy4.2 ::启动模拟器
ping -n 90 127.0.0.1nul ::等待模拟器启动成功,-n 90 为等待时间,建议设置大一点
adb shell input keyevent 82 ::模拟器打开后都会锁屏,adb模拟键盘输入,解锁
ping -n 2 127.0.0.1nul
三、脚本参数初始化
代码如下:
set appName=TestAndroid.apk ::被测程序名称
set pkgName=com.example.testandroid ::被测程序包名
set openName=com.example.testandroid.MainActivity ::被测试程序主activity
set "times=%1" ::测试次数,脚本传入参数
xcopy blat.exe C:\Windows\System32\ /Y ::将邮件工具复制到系统文件夹下,需关闭360卫士
四、循环执行安装打开关闭卸载
echo 测试开始source.txt ::创建一个source文件记录日志
for /l %%a in (1,1,%times%) do (
adb install TestAndroid.apk ::安装apk
adb shell am start -W -n %pkgName%/%openName% ::打开apk
call cmd /c close.bat %pkgName% ::关闭apk
adb uninstall %pkgName% ::卸载apk
adb logcat -d |findstr "^D/k.*}\" ::过滤logcat,获取需要的内容
adb logcat -c ::清除logcat日志
taskkill /f /im adb.exe)source.txt ::结束adb进程,防止占用source文件
::每次操作日志都记录在source中
五、处理source.txt提取关键信息,并发送邮件
六、设置windows定时任务,参数填写为测试次数,完成。
将16进制的字符串转换成bytes,通过hexstring2bytes转换而不能直接用getbytesString string = "41542B50494F392C310D"; mmOutStream.write(string.getBytes());读取inputsteam中的 ? Log.d("example", "do read"); 不执行,完整代码如下:?/*** This thread runs during a connection with a remote device. It handles all* incoming and outgoing transmissions.*/ private class ConnectedThread extends Thread {private final BluetoothSocket mmSocket;private final InputStream mmInStream;private final OutputStream mmOutStream;public ConnectedThread(BluetoothSocket socket, String socketType) {Log.d(TAG, "create ConnectedThread: " + socketType);mmSocket = socket;InputStream tmpIn = null;OutputStream tmpOut = null;// Get the BluetoothSocket input and output streamstry {tmpIn = socket.getInputStream();tmpOut = socket.getOutputStream();} catch (IOException e) {Log.e(TAG, "temp sockets not created", e);}mmInStream = tmpIn;mmOutStream = tmpOut;}public void run() {Log.i(TAG, "BEGIN mConnectedThread");byte[] buffer = new byte[1024];int bytes;// Keep listening to the InputStream while connectedwhile (true) {Log.d("example", "do read");try {// Read from the InputStreambytes = mmInStream.read(buffer);// Send the obtained bytes to the UI ActivitymHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes,-1, buffer).sendToTarget();} catch (IOException e) {Log.e(TAG, "disconnected", e);connectionLost();// Start the service over to restart listening modeBluetoothChatService.this.start();break;}}}/*** Write to the connected OutStream.** @param buffer* The bytes to write*/public void write(byte[] buffer) {String string = "41542B50494F392C310D";try {mmOutStream.write(string.getBytes());// Share the sent message back to the UI ActivitymHandler.obtainMessage(BluetoothChat.MESSAGE_WRITE, -1, -1,buffer).sendToTarget();} catch (IOException e) {Log.e(TAG, "Exception during write", e);}}public void cancel() {try {mmSocket.close();} catch (IOException e) {Log.e(TAG, "close() of connect socket failed", e);}} }
1、hardware\ril\reference-ril\Reference-ril.c 中 onRequest() 处理RIL_REQUEST_DIAL 时会 调用requestDial();
2、requestDial()中转换RIL_REQUEST_DIAL 请求为AT指令;
3、通过at_send_command()下发;
4、经过at_send_command_full,at_send_command_full_nolock ,writeline()写到设备中。
android 电话服务就是通过AT来实现的,不过不是java应用层直接发AT
而是通过socket,把命令发到RIL层,RIL筛选AT命令,与底层交互,实现电话的各个功能
你可以查一查RIL的实现