8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

参考文章: http://blog.csdn.net/yaoming168/article/details/51986751

http://blog.csdn.net/a34140974/article/details/50156193

一.介绍

在应用层监听通话状态只有三种,从TelephonyManager.java中注释可知这三种状态含义如下:

CALL_STATE_IDLE 空闲态(没有通话活动)

CALL_STATE_RINGING 包括响铃、第三方来电等待

CALL_STATE_OFFHOOK 包括dialing拨号中、active接通、hold挂起等

由上可知,active接通状态没有单独给出,所以我们无法得知电话是否接通了,

因此需要其它手段来获取更多的精确通话状态,遍查网络资料,一般有两种方法!

public class TelephonyManager {

/** Device call state: No activity. */

public static final int CALL_STATE_IDLE = 0;

/** Device call state: Ringing. A new call arrived and is

* ringing or waiting. In the latter case, another call is

* already active. */

public static final int CALL_STATE_RINGING = 1;

/** Device call state: Off-hook. At least one call exists

* that is dialing, active, or on hold, and no calls are ringing

* or waiting. */

public static final int CALL_STATE_OFFHOOK = 2;

}

二.监听9种通话状态

法一.使用系统api监听

条件:

1.需要权限android.permission.READ_PRECISE_PHONE_STATE、app打包时需要系统签名、安装在系统目录等

2.onPreciseCallStateChanged 精确通话回调api在android.jar中被hide了, 可以使用反射或没有被hide的android.jar解决

TelephonyManager telM = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);

telM.listen(new PhoneStateListener(){

/**

* 当有精确通话状态时回调

* Callback invoked when precise device call state changes

* @hide 隐藏api,给系统app使用的

*/

@Override

public void onPreciseCallStateChanged(PreciseCallState callState) {

//当有精确通话状态时回调

}

}, PhoneStateListener.LISTEN_PRECISE_CALL_STATE); //需要权限android.permission.READ_PRECISE_PHONE_STATE

// 精确的九大通话状态

public class PreciseCallState implements Parcelable {

public static final int PRECISE_CALL_STATE_IDLE = 0; //通话空闲

public static final int PRECISE_CALL_STATE_ACTIVE = 1; //正在通话(活动中)

public static final int PRECISE_CALL_STATE_HOLDING = 2; //通话挂起(例如我和多个人通话,其中一个通话在活动,而其它通话就会进入挂起状态)

public static final int PRECISE_CALL_STATE_DIALING = 3; //拨号开始

public static final int PRECISE_CALL_STATE_ALERTING = 4; //正在呼出(提醒对方接电话)

public static final int PRECISE_CALL_STATE_INCOMING = 5; //对方来电

public static final int PRECISE_CALL_STATE_WAITING = 6; //第三方来电等待(例如我正在和某人通话,而其他人打入时就会就进入等待状态)

public static final int PRECISE_CALL_STATE_DISCONNECTED = 7; //挂断完成

public static final int PRECISE_CALL_STATE_DISCONNECTING = 8; //正在挂断

}

法二.读取Logcat通信日志

条件:

1.android 4.1以上需要root权限,android 4.1以下版本只需添加日志权限android.permission.READ_LOGS

2.读取通信状态:在root状态下执行命令 logcat -v time -b radio

logcat日志被划分为以下几个缓冲区

-b

main — 主日志缓冲区(默认,普通app应用)

radio — 无线/电话相关日志缓冲区

events — 事件相关日志缓冲区

system — 系统相关日志缓冲区

//正则表达式,匹配通话状态

Pattern ptn = Pattern.compile("(\d{2}\-\d{2}\s\d{2}\:\d{2}\:\d{2}\.\d{3}).*?GET_CURRENT_CALLS.*?,(\w+),");

//Pattern ptn = Pattern.compile("(\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3}).*?qcril_qmi_voice_all_call_status_ind_hdlr:.call.state.(\d),");

//使用Root权限,执行logcat命令

Process process = Runtime.getRuntime().exec("su");

PrintWriter pw = new PrintWriter(process.getOutputStream());

pw.println("logcat -v time -b radio"); //logcat命令, -v 详细时间; -b radio 通信相关日志缓冲区

pw.flush();

//循环读取通话日志

BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));

String strLine;

while ((strLine = br.readLine()) != null) {

Matcher matcher = ptn.matcher(strLine);

if (matcher.find()) {// 匹配结果

String time = matcher.group(1); //提取通话时间

String state = matcher.group(2); //提取通话状态

}

}

pw.close();

br.close();

process.destroy();

三.图解9种通话状态

简书: http://www.jianshu.com/p/a362404f850f

CSDN博客: http://blog.csdn.net/qq_32115439/article/details/78395537

GitHub博客: http://lioil.win/2017/10/30/Android-PhoneState.html

Coding博客: http://c.lioil.win/2017/10/30/Android-PhoneState.html

www.android ind.com,Android相关推荐

  1. android layout组件,Android UI学习 - Linear Layout, RelativeLayout

    1.一些常用的公共属性介绍 1) layout_width -宽 fill_parent: 宽度和父元素相同,wrap_content: 宽度随本身的内容所调整,或者指定 px值来设置宽 2) lay ...

  2. android:layout_gravity 和 android:gravity 的区别

    gravity 这个英文单词是重心的意思,在这里就表示停靠位置的意思. android:layout_gravity 和 android:gravity 的区别 从名字上可以看到,android:gr ...

  3. Android横向伸缩,Android 实现伸缩布局效果示例代码

    最近项目实现下面的图示的效果,本来想用listview+gridview实现,但是貌似挺麻烦的于是就用flowlayout 来addview实现添加伸缩的效果,实现也比较简单. mainActivit ...

  4. android ble 设备扫描程序,Android应用开发Android 7.0 BLE scan 问题:程序无错但扫描不到BLE设备...

    本文将带你了解Android应用开发Android 7.0  BLE scan 问题:程序无错但扫描不到BLE设备,希望本文对大家学Android有所帮助. < 最近在做毕设,需要几周内从头学起 ...

  5. android window 大小,android popupWindow 中宽度莫名很大,求帮助?

    这个是popupwindow的内容xml(就是放了个ListView): android:layout_width="wrap_content" android:layout_he ...

  6. android radiobutton 分组,Android 第十课——UI RadioButton

    常用基础空组件 5 RadioGroup RadioButton 单选按钮时常用组件之一,但是开发过程中虽然很多地方会用到单选按钮,但是却不会用Android系统提供的原始样式,类似我们在写html时 ...

  7. android单线字体,Android自定义字体

    在main文件夹下,新建assets/fonts文件,添加.otf文件 image.png 字体工具类 import android.app.Application; import android.g ...

  8. mp4 android自动播放,Android 使用VideoView播放MP4的简单实现

    使用VideoView播放MP4 播放示例 实现简单的播放功能,播放手机本地的MP4文件.不依赖任何第三方框架,不添加任何防腐剂. 添加一个系统自带的控制条. 申请权限 读取存储中的MP4文件 准备布 ...

  9. android 虚方法,尝试在空对象引用上调用虚方法’android.view.View android.view.View.getRootView()’...

    我收到这个错误, "Attempt to invoke virtual method 'android.view.View android.view.View.getRootView()' ...

最新文章

  1. 亲测有用的markdown博客生成器
  2. java web 分页技术_javaweb分页的后端实现
  3. nginx ---- 配置成系统服务
  4. 使用Xcode7的Instruments检测解决iOS内存泄露
  5. matlab视频分辨率更改
  6. ckeditor 3.6一直提示“例外被抛出且未被接住”的问题的解决方法
  7. html查看订单详情,订单详情、订单状态.html
  8. 想下载B站视频却不知如何下手?一文教你爬B站!
  9. ArcGIS 在线地图加载插件介绍
  10. 用计算机找到自己的另一半,生辰八字算婚期计算器 免费算个人感情婚姻的另一半...
  11. jenkins如何清缓存,jenkins在结账前清除存储库并强制克隆与清理
  12. word文档 文字变网址 解决办法
  13. win10 运行debussy不能打开波形窗口问题
  14. 雷电2接口_雷电3和TYPE-C都是干什么的?一文读懂全部
  15. 小朋友你是否有很多问号图_小朋友你是否有很多问号表情包
  16. 准备移民澳洲的你,为何改移加拿大?
  17. 武汉伯钧成科技有限公司之行的郁闷感受
  18. 【JM】电脑检测不到U盘
  19. mac里python注释的快捷键_Mac 版的Python IDEL, 按什么快捷键可以快速显示上一条命令,下一条命令?...
  20. 鸟哥的Linux私房菜(服务器)- 第十九章、主机名控制者: DNS 服务器

热门文章

  1. 你还不知道Redis 高延迟时发生了啥嘛?
  2. 面向犯罪编程,9名程序员锒铛入狱
  3. docker安装xxl-job-admin步骤
  4. JeecgBoot 移动OA 新版本上线啦!!!
  5. 支付窗开发实战-张代浩-专题视频课程
  6. linux 下安装多个ngnix
  7. mysql 修改root 密码
  8. 那些相似的CRM之间究竟有无区别
  9. 记录cocos2d-x3.0版本号更改内容官方说明
  10. 互联网企业安全高级指南3.5 选择在不同的维度做防御