android 拨打电话、 监听来电、监听呼出电话的功能实现

demo1(通用):

权限

<!--    监听呼出电话  -->
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<!--    监听来电    -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--    拨打电话    -->
<uses-permission android:name="android.permission.CALL_PHONE" />

注册:

<receiver android:name=".PhoneReceiver">
    <intent-filter android:priority="1000">
        <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>

声明:

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.util.Log;

public class PhoneReceiver extends BroadcastReceiver {
    private static final String TAG = PhoneReceiver.class.getSimpleName();

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
            // 如果是拨打电话
            String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
            String outNumber = this.getResultData();// 去电号码
            Log.i(TAG, "call OUT 1:" + phoneNumber);
            Log.i(TAG, "call OUT 2:" + outNumber);

        } else if ("android.intent.action.PHONE_STATE".equals(intent.getAction())) {
            // 如果是来电
            TelephonyManager tManager = (TelephonyManager) context
                    .getSystemService(Service.TELEPHONY_SERVICE);
            String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
            // 来电号码
            String mIncomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
            Log.i(TAG, "call IN 1:" + state);
            Log.i(TAG, "call IN 2:" + mIncomingNumber);

            switch (tManager.getCallState()) {
                case TelephonyManager.CALL_STATE_RINGING:
                    Log.d(TAG, "**********************监测到电话呼入!!!!*****");
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK:
                    Log.d(TAG, "**********************监测到接听电话!!!!************");
                    break;
                case TelephonyManager.CALL_STATE_IDLE:
                    Log.d(TAG, "**********************监测到挂断电话!!!!*******************");
                    break;
            }
        }
    }
}

demo2 :


//1.获取telephone的实例
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
//2.注册电话的监听
tm.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);

private class MyPhoneStateListener extends PhoneStateListener {

    @Override
    public void onCallStateChanged(int state, String phoneNumber) {
        super.onCallStateChanged(state, phoneNumber);

        switch (state) {
            case TelephonyManager.CALL_STATE_IDLE:
                Log.d(TAG, "**********************监测到挂断电话!!!!*******************");
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK://接听状态
                Log.d(TAG, "**********************监测到接听电话!!!!************");
                break;
            case TelephonyManager.CALL_STATE_RINGING://电话响铃状态
                Log.d(TAG, "**********************监测到电话呼入!!!!*****");
                break;
            default:
                break;
        }
    }
}
Android中,使用Kotlin编写自动拨打电话和发送短信的功能通常涉及权限管理、Intent和PhoneStateListener。以下是简单的步骤: 1. **获取权限**: 首先,在AndroidManifest.xml文件中添加`<uses-permission>`标签以请求通话和发送短信权限: ```xml <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.SEND_SMS" /> ``` 2. **创建意图**(Intents): - 拨打电话:使用`ACTION_DIAL` Intent并设置号码作为数据: ```kotlin val phoneCallIntent = Intent(Intent.ACTION_DIAL) phoneCallIntent.data = Uri.parse("tel:" + phoneNumber) startActivity(phoneCallIntent) ``` - 发送短信:使用`ACTION_SEND` Intent,并通过`sms:` URI加上短信内容: ```kotlin val smsIntent = Intent().actionSend() smsIntent.type = "text/plain" smsIntent.putExtra(Intent.EXTRA_TEXT, "Your message content") startActivity(smsIntent) ``` 3. **监听状态变化**: 对于拨打电话,可以使用`TelephonyManager`的`listen()`方法,监听电话状态改变事件,然后在适当的时机拨打电话: ```kotlin val telephonyManager = getSystemService(TELEPHONY_SERVICE) as TelephonyManager telephonyManager.listen(object : PhoneStateListener() { // 监听... 在onCallStateChanged回调中处理拨打电话逻辑 }, PhoneStateListener.LISTEN_CALL_STATE) ``` 4. **处理结果和异常**: 要确保在用户操作(如取消拨打电话或拒绝发送短信)之后适当地处理结果。 注意,这些代码示例是在主线程中执行的,如果涉及到长时间的操作,可能会导致界面卡顿。因此,最好将耗时部分放在子线程中。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值