版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010356768/article/details/85093160
关键代码如下:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+editText.getText().toString()));
startActivity(intent);
menifest
<uses-permission android:name="android.permission.CALL_PHONE" />
manifest.xml增加读取电话状态的权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
MainActivity中增加一个内部类
public class MainActivity extends Activity implements View.OnClickListener {
......
private MyPhoneStateListener listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
......
//开启监听
TelephonyManager manager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
//调用listen方法开启监听,监听电话状态
listener = new MyPhoneStateListener();
manager.listen(listener,PhoneStateListener.LISTEN_CALL_STATE);
}
@Override
protected void onDestroy() {
TelephonyManager manager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
//什么也不监听了,这样就取消监听了
manager.listen(listener,PhoneStateListener.LISTEN_NONE);
super.onDestroy();
}
@Override
public void onClick(View view) {
...
}
//电话状态监听器
class MyPhoneStateListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
Log.i("TelephonyManager", "incoming number:" + incomingNumber);
switch (state) {
//无任何状态时
case TelephonyManager.CALL_STATE_IDLE:
Log.i("TelephonyManager", "CALL_STATE_IDLE");
break;
//接起电话时
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.i("TelephonyManager", "CALL_STATE_OFFHOOK");
break;
//电话进来时
case TelephonyManager.CALL_STATE_RINGING:
Log.i("TelephonyManager", "CALL_STATE_RINGING");
break;
}
}
}
}
现在运行程序,查看打印日志,空闲状态,incoming number为空
I/TelephonyManager: incoming number:
CALL_STATE_IDLE
现在我们呼出一个电话
I/TelephonyManager: incoming number:
CALL_STATE_OFFHOOK
当我们把这个呼出电话挂断时
I/TelephonyManager: incoming number:
CALL_STATE_IDLE
当我们用另一个手机给这个这台手机打电话时,未接听时,既振铃状态时,incoming number是可以拿到值的,但是不知道为什么我拿不到啊…谁知道告诉我下…
I/TelephonyManager: incoming number:
CALL_STATE_RINGING
接通,然后挂断
I/TelephonyManager: incoming number:
CALL_STATE_OFFHOOK
I/TelephonyManager: incoming number:
CALL_STATE_IDLE
public class MainActivity extends Activity implements View.OnClickListener {
......
private MyPhoneReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
......
//注册广播接收器
receiver = new MyPhoneReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_NEW_OUTGOING_CALL);
this.registerReceiver(receiver,filter);
}
@Override
protected void onDestroy() {
//取消注册广播接收器
unregisterReceiver(receiver);
......
}
......
//拦截呼出电话的receiver
class MyPhoneReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
//获取呼出电话的电话号码
String number = getResultData();
Log.i("MyPhoneReceiver",number);
if(number.equals("13333333333")){
//阻止拨出电话
setResultData(null);
}
}
}
......
}
manifest中增加呼出电话权限
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
真机上运行程序,拨打1008611查看日志
I/MyPhoneReceiver: 呼出的电话号码是:1008611
当我们拨打13333333333时,会直接挂断
自动挂断电话
代码不写了。有兴趣的同学自己实现一下