Java Android呼叫过滤器在我的设备上工作,但在客户端设备上不工作

Java Android呼叫过滤器在我的设备上工作,但在客户端设备上不工作,java,android,arrays,database,loops,Java,Android,Arrays,Database,Loops,我使用for循环创建了一个简单的呼叫过滤器,该循环遍历数据库并搜索保存的号码。这个过滤器在我的设备上工作得很好,但是当我把它发送给我的客户机时,它会自动允许每个呼叫通过。筛选器正在显示Deflecktur允许从…调用,因此我知道我们正在使用if/else语句。出于某种原因,它总是和他的设备上的else语句一起使用。这是来自广播接收器的代码 if (blocker && isRunning) { String appName = context.getString(

我使用for循环创建了一个简单的呼叫过滤器,该循环遍历数据库并搜索保存的号码。这个过滤器在我的设备上工作得很好,但是当我把它发送给我的客户机时,它会自动允许每个呼叫通过。筛选器正在显示Deflecktur允许从…调用,因此我知道我们正在使用if/else语句。出于某种原因,它总是和他的设备上的else语句一起使用。这是来自广播接收器的代码

if (blocker && isRunning) {
        String appName = context.getString(R.string.app_name);
        ITelephony telephonyService = getTeleService(context);
        if (telephonyService != null) {
            SparseArray<Phone> phones = getPhones(context, false);
            String incomingNumber = null;
            try {
                incomingNumber = intent.getExtras().getString(
                        TelephonyManager.EXTRA_INCOMING_NUMBER);
                if (incomingNumber != null && phones != null && phones.size() > 0) {
                    Log.i(TAG, "incoming call from " + incomingNumber);
                    boolean reject = false;
                    for (int i = 0; i < phones.size(); i++) {
                        Phone phone = phones.valueAt(i);
                        // Remove various characters to ensure a match
                        String matchNumber;
                        matchNumber = phone.getPhoneNumber().replaceAll("[^0-9\\+.,;#\\*N]", "");
                        if (incomingNumber.equals(matchNumber)) {
                            reject = true;
                            break;
                        }
                    }
                    if (reject) {
                        if (VERSION.SDK_INT < VERSION_CODES.GINGERBREAD) {
                            // Old method of silencing the ringer
                            telephonyService.silenceRinger();
                        } else {
                            final AudioManager am = (AudioManager) context
                                    .getSystemService(Context.AUDIO_SERVICE);
                            if (am.getRingerMode() != AudioManager.RINGER_MODE_SILENT) {
                                // Silence the ringer
                                if (mThread == null || !mThread.isAlive()) {
                                    mRingerMode = am.getRingerMode();
                                }
                                am.setRingerMode(AudioManager.RINGER_MODE_SILENT);
                                mThread = new Thread() {

                                    public void run() {
                                        SystemClock.sleep(3000);
                                        am.setRingerMode(mRingerMode);
                                    };
                                };
                                mThread.start();
                            }
                        }
                        telephonyService.endCall();
                        Toast.makeText(context, appName + " rejecting call from " + incomingNumber,
                                Toast.LENGTH_LONG).show();
                        Log.i(TAG, "call ended");
                    } else {
                        Toast.makeText(context, appName + " accepted call from " + incomingNumber,
                                Toast.LENGTH_LONG).show();
                        Log.i(TAG, "call accepted");
                    }
                } else {
                    // A phone state was encountered without incoming number, e.g. an outgoing call; ignore
                }
            } catch (Exception e) {
                if (incomingNumber == null)
                    incomingNumber = "[unknown]";
                e.printStackTrace();
                Log.e(TAG, "failed getting call info", e);
                Toast.makeText(
                        context, appName + " failed rejecting call from " + incomingNumber + "\n"
                                + e.getMessage(),
                        Toast.LENGTH_LONG).show();
            }
        }
    }
}

客户端使用的是三星Galaxy Light,而我使用的是OnePlus One

您是否尝试添加日志以查看matchNumber和incomingNumber的值,以检查它们是否确实匹配?可能是+61 4 vs 04


也许您还需要在regex中去掉incomingNumber的值?

首先,请了解您的客户端设备操作系统版本,我想可能会发生一些关于ITelephony的权限问题。客户端使用的是三星Galaxy Light,我使用的是OnePlus,请确认操作系统版本,并检查是否存在与权限相关的问题。客户端运行的是android 4.2.2,我运行的是android 4.4.2。我没有尝试日志,因为我的设备上没有错误。我知道我的设备上的数字匹配,因为过滤器正在工作。那么,你要试试日志吗?你能看到客户在过滤器中输入了什么吗?你确定他们做得对吗?你是从同一个收入号码测试的吗?只考虑主要问题?可能是传入号码与matchNumber不匹配,或者是从电话中读取的传入号码有误,正则表达式没有删除特殊字符,或者是其他一些不正常的东西正在阻止它们匹配。好吧,我可以记录所有我想要的,但没有从他的设备上看到日志,这对我没有好处。他离我还有三个州,所以我没有简单的登录方法。我决定创建一个toast,显示incomingNumber=matchNumber,并让客户截图。它工作得很好。我发现他的设备正在读取传入号码为155555555,我正在寻找55555555啊,我的错,我看到了一些日志消息,我想当你说过滤器显示Deflecktur允许来自。。。它在日志上。很高兴你把它整理好了!