在HashMap中匹配电话号码:Android

在HashMap中匹配电话号码:Android,android,broadcastreceiver,Android,Broadcastreceiver,我正在做一个应用程序,我需要存储一些号码,当有人打电话时,我需要检查传入的号码是否存在于我的数据库中 我所做的 我将电话号码存储在共享首选项中。android内部使用Map实现这一目的 问题: 假设我存储了9089889899(10位电话号码)。现在,如果我接到这个号码的来电,它可能会广播同一个号码有090898899或+91-9089889899的接收器 所以我的问题是,如果我将一个数字存储到首选项中,那么如何匹配传入的数字是否存在于首选项中 这是将匹配所有电话格式的正则表达式 (((([0-

我正在做一个应用程序,我需要存储一些号码,当有人打电话时,我需要检查传入的号码是否存在于我的数据库中

我所做的

我将电话号码存储在共享首选项中。android内部使用Map实现这一目的

问题:

假设我存储了9089889899(10位电话号码)。现在,如果我接到这个号码的来电,它可能会广播同一个号码有090898899或+91-9089889899的接收器


所以我的问题是,如果我将一个数字存储到首选项中,那么如何匹配传入的数字是否存在于首选项中

这是将匹配所有电话格式的正则表达式

(((([0-9]){0,1})(([0-9]){10}))|([0-9]){10}|(\+([0-9]){1,2}([0-9]{10})))
第一部分匹配0-1234 第二部分匹配1234 最后一部分+91-1234

更新

事实上这好多了

(((([0-9]){0,1})(([0-9]){10}))|(\+([0-9]){1,2}([0-9]{10})))

下面是匹配所有电话格式的正则表达式

(((([0-9]){0,1})(([0-9]){10}))|([0-9]){10}|(\+([0-9]){1,2}([0-9]{10})))
第一部分匹配0-1234 第二部分匹配1234 最后一部分+91-1234

更新

事实上这好多了

(((([0-9]){0,1})(([0-9]){10}))|(\+([0-9]){1,2}([0-9]{10})))

如果您使用手机作为SharedReference的密钥,您可以:

  • 检索SharedReference的所有值:请参阅
  • 遍历密钥集:请参见
  • 对于每个键,请使用contains String方法:请参阅

  • 编辑:为什么不使用内容提供商?

    如果您使用手机作为共享参考的密钥,您可以:

  • 检索SharedReference的所有值:请参阅
  • 遍历密钥集:请参见
  • 对于每个键,请使用contains String方法:请参阅

  • 编辑:为什么不使用内容提供商?

    您可以在广播接收器中尝试以下代码。 这里是“abc”和您的共享围栏的名称。假设num是您从广播接收器获得的数字: 在代码中,最后10位数字被取出并进行比较,因为这些数字存储在SharedReference中

      SharedPreferences sp = getSharedPreferences("abc",Context.MODE_PRIVATE);
        HashMap< String, String>hMap = (HashMap<String, String>) sp.getAll();
        String num = "+91-9089889899";
    
     if(   hMap.containsValue(num.substring(num.length()-10))){
         System.out.println("number present");
    
     }
    
    SharedReferences sp=getSharedReferences(“abc”,Context.MODE\u PRIVATE);
    HashMaphMap=(HashMap)sp.getAll();
    字符串num=“+91-9089889899”;
    if(hMap.containsValue(num.substring(num.length()-10))){
    系统输出打印项次(“存在的编号”);
    }
    
    您可以在广播接收器中尝试以下代码。 这里是“abc”和您的共享围栏的名称。假设num是您从广播接收器获得的数字: 在代码中,最后10位数字被取出并进行比较,因为这些数字存储在SharedReference中

      SharedPreferences sp = getSharedPreferences("abc",Context.MODE_PRIVATE);
        HashMap< String, String>hMap = (HashMap<String, String>) sp.getAll();
        String num = "+91-9089889899";
    
     if(   hMap.containsValue(num.substring(num.length()-10))){
         System.out.println("number present");
    
     }
    
    SharedReferences sp=getSharedReferences(“abc”,Context.MODE\u PRIVATE);
    HashMaphMap=(HashMap)sp.getAll();
    字符串num=“+91-9089889899”;
    if(hMap.containsValue(num.substring(num.length()-10))){
    系统输出打印项次(“存在的编号”);
    }
    
    我建议您使用类似的方式来处理电话号码,而不受格式限制


    中还有一些用于格式化和比较数字的函数

    我建议您使用类似的方式来处理电话号码,而不依赖于格式


    中还有一些用于格式化和比较数字的函数

    你能提供一些关于如何使用libphonenumber匹配两个数字的教程吗?你能提供一些关于如何使用libphonenumber匹配两个数字的教程吗?