电话管理器(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>