java - 如何以编程方式检查电话号码是否存在?

标签 java android

我想做一个 Android 应用程序来检查号码是否存在。我特别想调用该号码来检查,如果响铃则表示存在,否则不存在。

目前,我可以读取状态“IDLE”和“OFFHOOK”,但不能读取状态“CALL_STATE_RINGING”,据我所知,状态“CALL_STATE_RINGING”仅针对收到的调用触发。

如何了解何时响铃以及何时号码无效?

注意:调用方法只是一个想法,但如果其他解决方案有效,我可以接受它们。

我现在的代码:

听众:

public class EndCallListener extends PhoneStateListener {
private String TAG = "CALL_AUTOMATICALLY_LISTENER";


@Override
public void onCallStateChanged(int state, String incomingNumber) {
    if(TelephonyManager.CALL_STATE_RINGING == state) {
        // TODO
        Log.i(TAG, "RINGING, number: " + incomingNumber);
    }
    if(TelephonyManager.CALL_STATE_OFFHOOK == state) {
        Log.i(TAG, "OFFHOOK");
    }
    if(TelephonyManager.CALL_STATE_IDLE == state) {
        Log.i(TAG, "IDLE");
    }
}
}



public class MainActivity extends AppCompatActivity {
    private String TAG = "CALL_AUTOMATICALLY";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        askPermission();
    }

    private void askPermission() {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE},0);
    }

    public void startCall(View view) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (checkSelfPermission(Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
                String number = "+39555555555"; // fake number
                Intent intent = new Intent(Intent.ACTION_CALL);
                intent.setData(Uri.parse("tel:" + number));
                // Activate listener
                EndCallListener callListener = new EndCallListener();
                TelephonyManager mTM = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
                if (mTM != null) mTM.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE);
                else Log.d(TAG, "TelephonyManager null");
                // start call
                startActivity(intent);
            } else {
                askPermission();
            }
        }
    }

    public void startCallNotExisting(View view) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (checkSelfPermission(Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
                String number = "+39456464564545555565656565";
                Intent intent = new Intent(Intent.ACTION_CALL);
                intent.setData(Uri.parse("tel:" + number));
                // Activate listener
                EndCallListener callListener = new EndCallListener();
                TelephonyManager mTM = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
                if (mTM != null) mTM.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE);
                else Log.d(TAG, "TelephonyManager null");
                // start call
                startActivity(intent);
            } else {
                askPermission();
            }
        }
    }
}

最佳答案

我建议您检查电话号码正则表达式,而不是调用它们。将此方法放在您的帮助程序或 Activity 或 fragment 类中

public static boolean validateMobile(String mobile) {
    if (mobile.matches("^[+]?[0-9]{10,13}$")) {
        return true;
    } else {
        return false;
    }
}

并像这样使用它

if(Helper.validateMobile(mobile){
//mobile is valid
}else{
//mobile is not valid}

如果您针对一个特定国家/地区,此正则表达式也可能会有所不同。例如,我使用下面的正则表达式来表示伊朗电话号码

(\\+98|0)?9\\d{9}

关于java - 如何以编程方式检查电话号码是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60225469/

相关文章:

java - 测试 Junit 和 Mockito 在分析日期和小时数时出现错误

java - 带有匿名 EventListener 的 JPanel - 为什么 GC 不破坏监听器?

java - 如何通过xpath查找以空格和值结尾的元素

android - 尝试构建共享元素 Lollipop 过渡时过渡名称为空

android - 从 EditText 保存文本

java - 依赖项内的资源未添加到类路径中

java - findViewByIdlayoutinflator 无法膨胀我的布局,使用时返回 null

android - 计算汽车两个坐标之间的距离

java - 安卓socket连接失败?

android - Retrofit/OkHTTP/RxJava 间歇性 InterruptedIOException