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相关推荐

  1. 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 之 ...

  2. Error:java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major错误解决

    Error:java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major错误解决 标签 ...

  3. 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中的图片名字不对,或者引 ...

  4. 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不能 ...

  5. android studio远程控制,Android Studio远程登录控制台缺少“网络”和“窗口”命令?...

    我成功地连接到本地主机:5554,在/Users/me/.emulator_console_auth_token发现令牌认证,并得到了名单可用的命令: $ telnet localhost 5554 ...

  6. Android问题-DelphiXE5编义时提示找不到“连接器(arm-linux-androideabi-ld.exe)

    问题现象:DelphiXE5编义时提示找不到"连接器(arm-linux-androideabi-ld.exe)" 问题提示: Checking project dependenc ...

  7. android studio 多dex,AndroidStudio利用android-support-multidex解决64k的各种异常

    64k的各种异常 当你的应用程序和库引用达到一定规模,你遇到构建错误显示你的应用已经达到了一个Android应用程序构建体系结构的限制.早期版本的构建系统报告这个错误如下: Conversion to ...

  8. android升级gradle到3.4.1

    这两天把gradle升级到了gradle-3.4.1 com.android.tools.build:gradle升级到了com.android.tools.build:gradle:2.3.0 结果 ...

  9. Android 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚

    时之沙: http://blog.csdn.net/t12x3456 随着应用不断迭代,业务线的扩展,应用越来越大(比如集成了各种第三方sdk或者公共支持的jar包,项目耦合性高,重复作用的类越来越多 ...

最新文章

  1. c# 重写override
  2. IDEA——使用JSONObject时报错
  3. 使用JUnit 5 执行条件和并发测试
  4. 张睿:OpenH264拥有产品级的鲁棒性 欢迎contribute
  5. 【No.1 Ionic】基础环境配置
  6. 2079 ACM 选课时间 背包 或 母函数
  7. Java编程语言的风格
  8. windows 如何快速锁定计算机,Win7电脑锁定计算机快捷键的方法
  9. 使用jquery生成随机二维码的方法
  10. lwIP TCP/IP 协议栈笔记之十五: TCP协议
  11. 数据结构(1)—— 数据结构的三大结构
  12. 【OpenGL 学习笔记】第 4 篇:绘制四边形
  13. gstreamer学习笔记:将音视频合成MPEG2-TS流并打包通过rtp传输
  14. 在国民家庭教育中AI机器人的可塑性
  15. 基于单片机的音乐播放器设计
  16. 以太网采用的拓扑结构基本是什么型
  17. 沃尔玛积极助农,2月全国范围直采滞销蔬菜近500吨
  18. cad的lisp画线_CAD画缓和曲线lisp程序
  19. 库编译:opencv 交叉编译静态库
  20. 重来之大学版|卸负篇——破除光环效应,学长学姐、教授老师真的有这么厉害吗?

热门文章

  1. Linux下JAVA程序启动脚本(实例)
  2. Day 96/100 ‘X-Frame-Options‘ to ‘sameorigin‘后如何嵌入iframe
  3. OLAP和OLTP比较
  4. PwC上海AC面经-助理软件工程师(英语)
  5. zbb20181006 eclipse、编辑YAML插件-YEdit
  6. 医疗器械生物相容性评价
  7. dlib人脸对齐(python)
  8. 给教师的一百条意见读后感
  9. 网易免费企业邮箱配置客户端
  10. fread()和fwrite()函数分析