Android AT command
9.0以后这个方法不能用了
工具类写好了,可以参考
https://download.csdn.net/download/aaron121314/11705363
使用framework中的Phone.java来直接发送AT command。这是个接口,我们要获得这个接口的实现对象。
invokeOemRilRequestStrings(String[] strings, Message response)
1. 获取Phone对象
Class<?> PhoneFactory = null;
try {PhoneFactory = Class.forName("com.android.internal.telephony.PhoneFactory");Method[] methods = PhoneFactory.getDeclaredMethods();Method getDefaultPhone = null;for (Method method : methods) {if (method.getName().equals("getDefaultPhone")) {getDefaultPhone = method;break;}}if (getDefaultPhone != null) {getDefaultPhone.setAccessible(true);mPhone = getDefaultPhone.invoke(null, (Object[]) null);}
} catch (Exception e) {e.printStackTrace();Log.i(TAG, "init exception : " + e.getMessage());
}
2.获取 invokeOemRilRequestStrings() 方法,执行。
strings 参数中的一个strings[0] 必须是"RUN_ATC" string[1]是要执行的AT command
response 是执行函数的返回结果 AsyncResult 也是隐藏的,所以要用反射,这里的message.obj可以直接获取到AsyncResult对象,所以直接用就可以了。
/**
* Invokes RIL_REQUEST_OEM_HOOK_Strings on RIL implementation.
*
* @param strings The strings to make available as the request data.
* @param response <strong>On success</strong>, "response" bytes is
* made available as:
* (String[])(((AsyncResult)response.obj).result).
* <strong>On failure</strong>,
* (((AsyncResult)response.obj).result) == null and
* (((AsyncResult)response.obj).exception) being an instance of
* com.android.internal.telephony.gsm.CommandException
*
* @see #invokeOemRilRequestStrings(java.lang.String[], android.os.Message)
*/
public void invokeOemRilRequestStrings(String[] strings, Message response) {
mCi.invokeOemRilRequestStrings(strings, response);
}
private void sendATcommand(String cmd) {if (mPhone == null) {Log.i(TAG, "mPhone null");return;}Method invokeOemRilRequestStrings = null;try {String command[] = {"RUN_ATC", cmd};Class[] param = new Class[2];param[0] = String[].class;param[1] = Message.class;Class[] p = new Class[]{String[].class, Message.class};for (Method method : mPhone.getClass().getMethods()) {//Log.i(TAG,"name "+method.getName());if (method.getName().equals("invokeOemRilRequestStrings")) {invokeOemRilRequestStrings = method;}}//invokeOemRilRequestStrings = mPhone.getClass().getDeclaredMethod("invokeOemRilRequestStrings", p);invokeOemRilRequestStrings.setAccessible(true);invokeOemRilRequestStrings.invoke(mPhone, command, mResponseHandler.obtainMessage(1));} catch (Exception e) {e.printStackTrace();Log.i(TAG, "send AT command exception : " + e.getMessage());}
}
private Handler mResponseHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 1:/* Field[] fields=msg.obj.getClass().getDeclaredFields();for (Field f:fields){Log.i(TAG,"fields : "+f.getName());}*/try {Field exceptionField = msg.obj.getClass().getField("exception");Exception exception= (Exception) exceptionField.get(msg.obj);if (exception != null) {Log.i(TAG, " result message exception : "+exception);mResultTextView.append(exception.toString());mResultTextView.append("\n");break;}Field result = msg.obj.getClass().getField("result");String[] results = (String[]) result.get(msg.obj);for (String s : results) {Log.i(TAG, "result : " + s);mResultTextView.append(s);}mResultTextView.append("\n");} catch (Exception e) {e.printStackTrace();Log.i(TAG, " receive message exception : "+e.getMessage());}break;default:break;}}};
3.权限问题
一定要用phone进程和sharedUserID,还要sign后才能运行。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.at_command" android:sharedUserId="android.uid.phone"><application android:allowBackup="true" android:icon="@mipmap/ic_launcher"android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"android:process="com.android.phone"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>
Android AT command相关推荐
- com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0
eclipse运行android project报错com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0 之 ...
- Error:java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major错误解决
Error:java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major错误解决 标签 ...
- Android Process 'command 'C:\Users\Win\AppData\Local\Android\Sdk\build-t non-zero exit value 1错误解决方案
Process 'command '*****'' finished with non-zero exit value 1错误解决方案 一. 布局: 1.图片,drawable中的图片名字不对,或者引 ...
- com/android/dx/command/main,com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0
如果你在开发过程中遇到了上述的Bug,基本上是JDK版本不一致造成的,指的是高版本的JDK编译的class不能放在低版本的JDK上运行. 如果是Version 52,就表示JDK8编译的class不能 ...
- android studio远程控制,Android Studio远程登录控制台缺少“网络”和“窗口”命令?...
我成功地连接到本地主机:5554,在/Users/me/.emulator_console_auth_token发现令牌认证,并得到了名单可用的命令: $ telnet localhost 5554 ...
- Android问题-DelphiXE5编义时提示找不到“连接器(arm-linux-androideabi-ld.exe)
问题现象:DelphiXE5编义时提示找不到"连接器(arm-linux-androideabi-ld.exe)" 问题提示: Checking project dependenc ...
- android studio 多dex,AndroidStudio利用android-support-multidex解决64k的各种异常
64k的各种异常 当你的应用程序和库引用达到一定规模,你遇到构建错误显示你的应用已经达到了一个Android应用程序构建体系结构的限制.早期版本的构建系统报告这个错误如下: Conversion to ...
- android升级gradle到3.4.1
这两天把gradle升级到了gradle-3.4.1 com.android.tools.build:gradle升级到了com.android.tools.build:gradle:2.3.0 结果 ...
- Android 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚
时之沙: http://blog.csdn.net/t12x3456 随着应用不断迭代,业务线的扩展,应用越来越大(比如集成了各种第三方sdk或者公共支持的jar包,项目耦合性高,重复作用的类越来越多 ...
最新文章
- c# 重写override
- IDEA——使用JSONObject时报错
- 使用JUnit 5 执行条件和并发测试
- 张睿:OpenH264拥有产品级的鲁棒性 欢迎contribute
- 【No.1 Ionic】基础环境配置
- 2079 ACM 选课时间 背包 或 母函数
- Java编程语言的风格
- windows 如何快速锁定计算机,Win7电脑锁定计算机快捷键的方法
- 使用jquery生成随机二维码的方法
- lwIP TCP/IP 协议栈笔记之十五: TCP协议
- 数据结构(1)—— 数据结构的三大结构
- 【OpenGL 学习笔记】第 4 篇:绘制四边形
- gstreamer学习笔记:将音视频合成MPEG2-TS流并打包通过rtp传输
- 在国民家庭教育中AI机器人的可塑性
- 基于单片机的音乐播放器设计
- 以太网采用的拓扑结构基本是什么型
- 沃尔玛积极助农,2月全国范围直采滞销蔬菜近500吨
- cad的lisp画线_CAD画缓和曲线lisp程序
- 库编译:opencv 交叉编译静态库
- 重来之大学版|卸负篇——破除光环效应,学长学姐、教授老师真的有这么厉害吗?
热门文章
- Linux下JAVA程序启动脚本(实例)
- Day 96/100 ‘X-Frame-Options‘ to ‘sameorigin‘后如何嵌入iframe
- OLAP和OLTP比较
- PwC上海AC面经-助理软件工程师(英语)
- zbb20181006 eclipse、编辑YAML插件-YEdit
- 医疗器械生物相容性评价
- dlib人脸对齐(python)
- 给教师的一百条意见读后感
- 网易免费企业邮箱配置客户端
- fread()和fwrite()函数分析