java 如何使用InCallService拒绝来电

mnowg1ta  于 2023-03-11  发布在  Java
关注(0)|答案(1)|浏览(152)

我有个问题:
如何使用InCallService*拒绝来电。
在文档中,它要求我使用InCallService代替TelephonyManager中的EXTRA_INCOMING_NUMBER,并代替TelecomManager中的endCall(),因为它们已弃用,但我不知道如何使用
这意味着这两个问题的解决方案来自InCallService
只是,我需要在我的应用程序中使用拒绝呼叫电话,而不是创建默认呼叫电话应用程序。

安卓清单.xml

<receiver android:name=".CallerNumberReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" />
            </intent-filter>
        </receiver>

类呼叫者号码接收者

package com.example.myapplication1;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyCallback;
import android.telephony.TelephonyManager;

import android.widget.Toast;

import androidx.annotation.RequiresApi;

public class CallerNumberReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {

            telephonyManager.registerTelephonyCallback(context.getMainExecutor(), new CallStateListener() {
                @Override
                public void onCallStateChanged(int state) {
                    if(state == TelephonyManager.CALL_STATE_RINGING){
                        // WHERE IS PHONE NUMBER?
                    }
                }
            });
        } else {
            telephonyManager.listen(new PhoneStateListener() {
                @Override
                public void onCallStateChanged(int state, String phoneNumber) {
                    super.onCallStateChanged(state, phoneNumber);
                    if (state == TelephonyManager.CALL_STATE_RINGING) {
                        Toast.makeText(context, "number : " + phoneNumber, Toast.LENGTH_SHORT).show();
                    }
                }
            }, PhoneStateListener.LISTEN_CALL_STATE);
        }
    }

    @RequiresApi(api = Build.VERSION_CODES.S)
    abstract static class CallStateListener extends TelephonyCallback implements TelephonyCallback.CallStateListener {
        @Override
        public void onCallStateChanged(int state) {

        }

    }

}
9udxz4iz

9udxz4iz1#

对于,您的第一个问题,拒绝来电,您可以使用InCallService .

public class CallService extends InCallService{
    @Override
    public void onCallAdded(Call call){
       super.onCallAdded(call);
       call.disconnect();
    }
}

对于第二个问题,您可以使用名为registerTelephonyCallback()的方法注册TelephonyCallback,然后覆盖onCallStateChanged()方法。为此,您需要针对API级别31或更高级别。

相关问题