您的位置:首页 > 移动开发 > Android开发

Android中电话相关操作

2016-04-21 22:52 134 查看
大概的意思:打出电话的过程是:安卓中的底层的service 与手机所在地的电信,移动,或者联通的基站 时刻相连,基站又与网络运营商的服务器相连。你的手机与基站相连,再与服务器相连,再与所拨打的电话号码的手机所在地附近的基站相连,再与对方手机相连。这个过程。
Android中电话的通信机制
一,如何使用代码拨打电话?1>创建隐式意图: Intent intent=new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:133333"));2>启动Activity: startActivity(intent);3>在清单文件中注册拨号权限 android.permission.CALL_PHONE
二,如何监听呼入电话(监听电话状态)1>编写一个监听器类,该类继承自PhoneStateListener。 重写该类中的监听方法。2>获取TelephonyManager电话管理器。 调用manager.listen(); 开始监听。3>在清单文件中注册权限。 android.permisison.READ_PHONE_STATE

三,如何监听呼出电话1>编写一个广播接收器,接收呼出电话的系统广播: Intent.ACTION_NEW_OUTGOING_CALL2>重写广播接收器的onReceive方法,获取呼出电话 的电话号码,做后续业务。(可能需要拦截)3>注册广播接收器。4>在清单文件中添加权限。 android.permission.PROCESS_OUTGOING_CALLS
---------------------------------------------------------------------------------------------------实例,如何实现上面三个问题layout 布局文件<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=".MainActivity" >
<EditText android:id="@+id/etNumber" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:hint="请输入电话号码" android:ems="10" >
<requestFocus /> </EditText>
<Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/etNumber" android:onClick="doClick" android:text="打电话" />
</RelativeLayout>------------------------------------------------------------------------------------------一,如何使用代码拨打电话?1>创建隐式意图: Intent intent=new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:133333"));2>启动Activity: startActivity(intent);3>在清单文件中注册拨号权限 android.permission.CALL_PHONE /** * 监听 * @param view */ public void doClick(View view){ switch (view.getId()) { case R.id.button1: //1. 创建隐式意图 Intent intent = new Intent(Intent.ACTION_CALL); String number = etNumber.getText().toString(); intent.setData(Uri.parse("tel:"+number)); //2. 启动Activity startActivity(intent); //3. 添加权限 break; } }在 AndroidManifest.xml 项目清单文件中添加权限
<uses-permission android:name="android.permission.CALL_PHONE"/> //拨打电话权限
[/b] <uses-permission android:name="android.permission.READ_PHONE_STATE"/> //监听呼入电话状态权限 <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> // 监听呼出电话权限-----------------------------------------------------------------------------------------------------二,如何监听呼入电话(监听电话状态)1>编写一个监听器类,该类继承自PhoneStateListener。 重写该类中的监听方法。2>获取TelephonyManager电话管理器。 调用manager.listen(); 开始监听。3>在清单文件中注册权限。 android.permisison.READ_PHONE_STATE

/** * 监听电话的监听器 */ class MyPhoneListener extends PhoneStateListener{ /** * 当电话状态改变了 将会执行该方法 */ @Override public void onCallStateChanged(int state, String incomingNumber) { Log.i("info", "incomingNumber:"+incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_IDLE: Log.i("info", "CALL_STATE_IDLE"); break; case TelephonyManager.CALL_STATE_OFFHOOK: Log.i("info", "CALL_STATE_OFFHOOK"); break; case TelephonyManager.CALL_STATE_RINGING: Log.i("info", "CALL_STATE_RINGING"); break; } } }
在onCreate()方法中//监听电话状态 获取TelephonyManager电话管理器 这个是系统服务 所以用getSystemServiceTelephonyManager manager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);//调用listen方法开启监听 manager.listen(new MyPhoneListener(), PhoneStateListener.LISTEN_CALL_STATE);
添加权限<uses-permission android:name="android.permission.READ_PHONE_STATE"/> //监听呼入电话状态权限-----------------------------------------------------------------------------------------------------------------------三 ,如何监听呼出电话 1>编写一个广播接收器,接收呼出电话的系统广播:
Intent.ACTION_NEW_OUTGOING_CALL 2>重写广播接收器的onReceive方法,获取呼出电话
的电话号码,做后续业务。(可能需要拦截) 3>注册广播接收器。 4>在清单文件中添加权限。
android.permission.PRECESS_OUTGOING_CALLS
在OnCreate()方法中 //注册广播接收器receiver = new MyPhoneReceiver();IntentFilter filter = new IntentFilter();filter.addAction(Intent.ACTION_NEW_OUTGOING_CALL);this.registerReceiver(receiver, filter);
/** * 接收呼出电话系统广播的接收器 */ class MyPhoneReceiver extends BroadcastReceiver{ public void onReceive(Context context, Intent intent) { //获取呼出电话的号码 String number=getResultData(); Log.i("info", "number:"+number); if(number.equals("18888888888")){ //把电话号码置null setResultData(null); } } }添加权限<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> // 监听呼出电话权限----------------------------------------------------------------------------------------------最后在OnDestroy 中取消注册广播接收器@Override protected void onDestroy() { super.onDestroy(); //取消注册广播接收器 this.unregisterReceiver(receiver); }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: