文档章节

android开发笔记之多媒体—TelephonyManager(电话管理器)

Mr_Nice
 Mr_Nice
发布于 2016/05/22 20:01
字数 521
阅读 53
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

电话管理器(TelephonyManager)

   电话管理器是一个管理手机通话状态,电话网络信息的服务类。
   该类提供了大量的getXxx()方法来获取电话网络的相关信息

获取TelephonyManager对象的方式:

context.getSystemService(Context.TELEPHONY_SERVICE);

接下来就可以获取相关信息:

   getDeviceId():获取设备编号

   getDeviceSoftwareVersion():获取系统平台的版本

   getNetworkOperator():获取网络运营商代号

   getNetworkOperatorName():获取网络运营商名字

   getPhoneType():获取手机网络类型

   getCellLocation():获取设备所在位置

   getSimCountryIso():获取SIM卡的国别

   getSimSerialNumber():获取SIM卡序列号

   getSimState():获取SIM卡的状态

   getLine1Number():获取本地号码(联通和电信卡是可以的)  

此外还提供了listen方法来监听通话状态,该方法可以监听手机来电信息。
manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
onCallStateChanged(int state,String incomingNumber)方法

    state:是电话的状态,取值有

    TelephonyManager.CALL_STATE_IDLE 挂电话和空闲状态

    TelephonyManager.CALL_STATE_OFFHOOK  摘机状态   

    TelephonyManager.CALL_STATE_RINGING 来电状态:电话铃声响起的那段时间或正在通话又来新电,新来电话不得不等待的那段时间。

incomingNumber:是来电电话号码

注意:
需要加上读取电话状态的权限

 <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
 打电话的监听权限
 <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> 

实例:

这里写图片描述

核心代码:

public class MainActivity extends Activity {

    private TextView tv;
    private TelephonyManager telephony;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.tv);
        //初始化TelephonyManager
        telephony = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("获取当前安卓版本:" + telephony.getDeviceSoftwareVersion()+"\n");
        stringBuffer.append("运营商:" + telephony.getNetworkOperatorName()+"\n");
        stringBuffer.append("SIM卡的序列号:" + telephony.getSimSerialNumber()+"\n");
        stringBuffer.append("本机号码:" + telephony.getLine1Number()+"\n");
        tv.setText(stringBuffer.toString());
        telephony.listen(new PhoneStateListener(){
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                // TODO Auto-generated method stub
                super.onCallStateChanged(state, incomingNumber);
                if (state == TelephonyManager.CALL_STATE_IDLE) {
                    Toast.makeText(MainActivity.this, "空闲状态", Toast.LENGTH_LONG).show();
                }else if (state == TelephonyManager.CALL_STATE_RINGING) {
                    Toast.makeText(MainActivity.this, "响铃状态", Toast.LENGTH_LONG).show();
                }else if (state == TelephonyManager.CALL_STATE_OFFHOOK) {
                    Toast.makeText(MainActivity.this, "摘机状态", Toast.LENGTH_LONG).show();
                }
            }
        }, PhoneStateListener.LISTEN_CALL_STATE);
    }
}

布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.telephonemanager.MainActivity" >

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout> 
Mr_Nice
粉丝 0
博文 47
码字总数 39947
作品 0
广州
私信 提问
加载中
请先登录后再评论。
浅入浅出Android(003):使用TextView类构造文本控件

基础: TextView是无法供编辑的。 当我们新建一个项目MyTextView时候,默认的布局(/res/layout/activity_main.xml)中已经有了一个TextView: <TextView 运行效果如下: 修改其文本内容...

樂天
2014/03/22
696
1
我的架构演化笔记 功能1: 基本的用户注册

“咚咚”,一阵急促的敲门声, 我从睡梦中惊醒,我靠,这才几点,谁这么早, 开门一看,原来我的小表弟放暑假了,来南京玩,顺便说跟我后面学习一个网站是怎么做出来的。 于是有了下面的一段...

强子哥哥
2014/05/31
976
3
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
22
Nutch学习笔记4-Nutch 1.7 的 索引篇 ElasticSearch

上一篇讲解了爬取和分析的流程,很重要的收获就是: 解析过程中,会根据页面的ContentType获得一系列的注册解析器, 依次调用每个解析器,当其中一个解析成功后就返回,否则继续执行下一个解...

强子哥哥
2014/06/26
712
0
树莓派(Raspberry Pi):完美的家用服务器

自从树莓派发布后,所有在互联网上的网站为此激动人心的设备提供了很多有趣和具有挑战性的使用方法。虽然这些想法都很棒,但树莓派( RPi )最明显却又是最不吸引人的用处是:创建你的完美家用...

异次元
2013/11/09
7.3K
8

没有更多内容

加载失败,请刷新页面

加载更多

倒计时一周,HOLOS千人大会即将召开!

8月10日消息,Holos霍洛斯星际云自由能源将于2020年8月17日在深圳召开千人媒体发布会。据了解,此次发布会将请到众多行业领袖、区块链技术精英、数十位国家级专科院士以及多位能源行业重量级...

osc_njd5t1rw
54分钟前
17
0
Goroutine 泄露排查

我们在发布一个 go 应用时,默认都会启用两个 http handler: 一个是 pprof,方便线上动态追踪问题;另外一个是 prometheus 的 metrics,这样就可以通过 grafana 准实时的监控当前 runtime 信...

ms2008
2019/06/03
6
0
如何在Python中打印到stderr? - How to print to stderr in Python?

问题: There are several ways to write to stderr: 有几种写stderr的方法: # Note: this first one does not work in Python 3print >> sys.stderr, "spam"sys.stderr.write("spam\n")......

法国红酒甜
56分钟前
27
0
关于JWT Token 自动续期的解决方案

前言 在前后端分离的开发模式下,前端用户登录成功后后端服务会给用户颁发一个jwt token。前端(如vue)在接收到jwt token后会将token存储到LocalStorage中。 后续每次请求都会将此token放在请...

飘渺Jam
07/16
20
0
5G时代会不会导致编程语言大灭绝,JS的前景是否会更好-诺禾

首先,5G打开了工业互联网的大门,同时5G也会推动一系列技术的发展,包括物联网、大数据、边缘计算、人工智能等等,而这些技术的发展又会推动各种技术平台的发展,从而形成以技术平台为基础来...

osc_jo2m8l1r
56分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部