【达内课程】Android中关于电话的操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 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时,会直接挂断

自动挂断电话
在这里插入图片描述
代码不写了。有兴趣的同学自己实现一下

猜你喜欢

转载自blog.csdn.net/u010356768/article/details/85093160