文档章节

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

Mr_Nice
 Mr_Nice
发布于 2016/05/22 20:01
字数 521
阅读 7
收藏 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自学笔记《三》——系统架构分析

下面是Android的系统架构图 翻译后 从上图中可以看出,Android系统架构为4层结构,从上层到下层分别是应用程序层、应用程序框架层、系统运行库层以及Linux内核层,分别介绍如下: 1)应用程序...

郭子
2012/02/03
0
5
android之通过phoneStateListener监听电话状态改变

效果图 当我们外部打电话过来的时候,当前的信息会自动的进行改变。 ------------------------------------------------------------------------------- package cn.com.chenzheng_java; i...

孙泽伟
2013/09/03
0
0
通过服务监控手机呼叫状态并进行录音

两个服务互相守护 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" </LinearLayout>开启服务和停止服务 package com.itheima.phonelistener; import android.ap......

chenruibing
2015/05/27
0
0
Android 进阶学习笔记整理

一.android系统架构图及各层介绍 1. 应用层:应用是用java语言编写的运行在虚拟机上的程序,比如通讯录,日历,电话,短信,浏览器等。 2. 应用框架层:这一层是编写Google发布的核心应用时所...

FunCode
07/22
0
0
BroadCastReceiver(广播接收者的静态注册)简单使用例子

静态注册方式的特点:只要安装了静态注册的BroadCastReceiver应用,不管退不退出应用 广播接收者都在监听 //简单实现监听电话状态例子 静态注册方式的特点:只要安装了静态注册的BroadCastRe...

初来小修
2016/02/16
146
0

没有更多内容

加载失败,请刷新页面

加载更多

八月新增开源项目:假装自己是图形界面的 Git 命令行工具

每月新增开源项目。顾名思义,每月更新一期。我们会从社区上个月新收录的开源项目中,挑选出有价值的、有用的、优秀的、或者好玩的开源项目来和大家分享。数量不多,但我们力求推荐的都是精品...

编辑部的故事
8分钟前
2
0
20180918 find命令与Linux文件扩展名

命令find 用来查找搜索文件。 搜索文件相关命令: which 从环境变量里的目录中去搜索 whereis(不常用) 从一个固定的库中搜索 locate(需要单独安装 yum install -y mlocate) 查询时会从/var/...

野雪球
10分钟前
0
0
一步步编写自己的PHP爬取代理IP项目(二)

这一章节我们正式开展我们的爬虫项目,首先我们先要知道哪个网站能获取到免费代理IP,目前比较火的网站有西刺代理,快代理等,这里我们拿西刺代理作为例子。 西刺代理官网: http://www.xic...

NateHuang
31分钟前
0
0
GO 数组相关操作

package mainimport("fmt""math/rand""time")func main() {//数组的几种定义方式var arr1 [3]int = [3]int{1,2,3}var arr2 = [3]int{4,5,6}arr3 := [3]string{"h", "w", ......

汤汤圆圆
57分钟前
1
0
JAVA 中interrupt、interrupted和isInterrupted的区别

首先,我们说明下三个方法的功能 interrupt() 向当前调用者线程发出中断信号 isinterrupted() 查看当前中断信号是true还是false interrupted() 是静态方法,查看返回当前中断信号并将中断信号...

我爱春天的毛毛雨
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部