android - 无法在android中比较两个字符串

标签 android string-comparison callblocking

我是 Android 新手。我正在开发一个应用程序来阻止不需要的电话。现在,当我尝试将传入号码与联系号码进行比较时,我被困在这里。这是代码。请帮忙。 在这里,在选中复选框时,我需要阻止来自陌生人的所有调用(不在联系人中)

Bundle extra=intent.getExtras();//new
telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
if(extra!=null)//new=== getting the blocked number {
    state=extra.getString(telephonyManager.EXTRA_STATE);
    if(state.equals(telephonyManager.EXTRA_STATE_RINGING)) {
        number=extra.getString(telephonyManager.EXTRA_INCOMING_NUMBER);
        Log.w("INCOMMING NUMBER",number);
    }
}
if(noStrangers_cb.isChecked()){
    Cursor phones1 = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
    while (phones1.moveToNext()){
        String phoneNumber = phones1.getString(phones1.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        Log.d("NUMBER IN CONTACT",phoneNumber );

        //boolean val= number== phoneNumber;
        //String no=number;
        //Log.d("ASSIGNING NUMBER TO NO = ", no);
        //Collator c=Collator.getInstance();
        if(!phoneNumber.equals(number))
            {
            Log.d("IF ", "STRANGERS"+number);
            //Log.d("NUMBER CHECKING", "NUMBER = "+number+"CONTACT = "+phoneNumber);
            try {
                telephonyService.endCall();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            }
    }
    phones1.close();
}//end if Strangers

日志: enter image description here

更新后的代码如下:

if(allContacts_cb.isChecked())
                     {
                      Log.d("BLOCK ALL CONTACTS","blocking contacts.........." );
                      Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
                       while (phones.moveToNext())
                       {
                        String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        Log.d("NUMBER IN CONTACT ",phoneNumber );
                        String num=phoneNumber.replace("-","");
                        String incom=incomingNumber;
                        String s1="0"+num;
                        String s2="+91"+num;
if((num.equals(incomingNumber))||((s1).equals(incomingNumber))||(s2).equals(incomingNumber))//if(phoneNumber.compareTo(no)==0)//&&(checking==true))
                        { 
                          Log.d("IF ", "INSIDE IF OF BLOCKING CONTACTS");//+cn+"num"+n);
                          Log.d("NUMBER CHECKING", "NUMBER = "+number+"CONTACT = "+phoneNumber);
                          try {
                            ending1=telephonyService.endCall();
                            if(ending1)
                             {  
                             for(int i=1;i<=1;i++)
                             {
                              android.telephony.SmsManager sms = android.telephony.SmsManager.getDefault();
                              sms.sendTextMessage(incom, null, SMS, null, null);
                              break;
                             }
                              }
                              } catch (Exception e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                                }

                          } 
                        else
                        {
                            if(noStrangers_cb.isChecked())
                            {
                                try {
                                    telephonyService.endCall();
                                } catch (RemoteException e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }
                            }
                        }
                          }//end of while
                          phones.close();
                         }//end if allContacts

谁能帮我..拜托..

最佳答案

替换号码中的 _ 字符并不是最终的解决方案。您应该阅读PhoneNumberUtils ,或者这里是best library 'libphonenumber'可用于与电话号码相关的各种类型的操作。

阅读详情about libphonenumber

下面是代码 fragment ,可用于您的目的。

public boolean isCallerInDatabase(String caller, String phoneNumberFromDb) {
        phoneUtil = PhoneNumberUtil.getInstance();
        if(phoneUtil.isNumberMatch(caller, phoneNumberFromDb) != PhoneNumberUtil.MatchType.NO_MATCH) {
            //Number matched 
            Log.i("TEST", "NUMBER MATCHED");
            return true;
        }
        Log.i("TEST", "NUMBER NOT MATCHED");
        return false;       
    }

更新:Android 将该库添加为实用程序类。

Android 本身已添加 PhoneNumberUtils电话相关辅助方法的类。要比较两个电话号码,您应该使用 PhoneNumberUtils.compare方法。

祝你编码愉快:)

关于android - 无法在android中比较两个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10749213/

相关文章:

ios - CallKit 不会阻止数组中的数字

algorithm - 比较两棵树之间差异的算法有哪些?

java - Java中与逻辑运算符的字符串比较

java - 我如何比较来自 jtextfield (.getText()) 的字符串输入与另一个 String[] 数组? +几个条件

java - 如何以编程方式阻止 Android Nougat、Oreo 及更高版本中的调用?

android - TextView.setText (Android) 导致崩溃。知道为什么吗?

java - 如何让 SharedPreference 与 Camera.Parameters setPreviewSize 一起使用

android - Flutter Background 任务在每天午夜处理和安排当天的通知

java - 检查android应用程序中的空字段

asynchronous - 将数据从 BigQuery 导出到 GCS - 可以部分传输吗?