Как получить имя сим-карты для элемента журнала вызовов в Android?

Я пытаюсь получить имя сима для каждого журнала вызовов, как этот:

Uri URI_PHONE = CallLog.Calls.CONTENT_URI;
    String SELECTION_PHONE = CallLog.Calls.NUMBER + "=?";
    String[] SELECTION_ARRAY_PHONE = new String[]{phNum};

    if (ActivityCompat.checkSelfPermission(getContext(), android.Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
        //                                          int[] grantResults)
        // to handle the case where the user grants the permission. See the documentation
        // for ActivityCompat#requestPermissions for more details.
        Toast.makeText(getContext(), "Grant Permission First", Toast.LENGTH_SHORT).show();
    }
    Cursor currLogs = getContext().getContentResolver().query(URI_PHONE, null, SELECTION_PHONE, SELECTION_ARRAY_PHONE, CallLog.Calls.DATE + " DESC;");

    int duration = currLogs.getColumnIndex(CallLog.Calls.DURATION);
    int acountName = currLogs.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_ID);
    int date = currLogs.getColumnIndex(CallLog.Calls.DATE);
    int type = currLogs.getColumnIndex(CallLog.Calls.TYPE);

    if (currLogs.getCount()>0) {
        while (currLogs.moveToNext()) {
            String talkedFor = currLogs.getString(duration);
            String acount = currLogs.getString(acountName);
            String dt = currLogs.getString(date);
            String calltp = currLogs.getString(type);
            int tp = Integer.parseInt(calltp);

            Drawable drawableType = null;
            switch (tp) {
                case CallLog.Calls.OUTGOING_TYPE:
                    drawableType = out;
                    break;

                case CallLog.Calls.INCOMING_TYPE:
                    drawableType = in;
                    break;

                case CallLog.Calls.MISSED_TYPE:
                    drawableType = missed;
                    break;

            }

            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) {
                SubscriptionManager subscriptionManager = (SubscriptionManager) getContext().getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);

                List<SubscriptionInfo> subscriptionInfoList = null;

                subscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList();

                if (subscriptionInfoList != null && subscriptionInfoList.size() > 0) {
                    for (SubscriptionInfo info : subscriptionInfoList) {
                        String carrierName = String.valueOf(info.getDisplayName());
                        String mobileNo = info.getNumber();
                        String countyIso = info.getCountryIso();
                        String id = info.getIccId();
                        int dataRoaming = info.getDataRoaming();
                        if (id.equals(acount)) {
                            if (carrierName.isEmpty()){
                                simCardName = (String) info.getDisplayName();
                            }else {
                                simCardName = carrierName;
                                break;
                            }
                        }
                    }

                }
            }

            callLogsMore.add(new CallsDetailsModel(talkedFor, drawableType,simCardName, dt));
        }
    }

Я тестировал этот код на Lenovo A7700 под управлением Android 6.1, и он работал нормально, но при тестировании на других устройствах, таких как Redmi Note 4, он показывал пустое имя. Я также попробовал решение для управления телефонией, но оно не работало в моем телефоне (Lenovo A7700), поэтому я выбрал эту процедуру.

Я думаю, что решение связано с CallLogs.Calls.PHONE_ACCOUNT_COMPONENT_NAME, при запросе это возвращает длинное строковое значение.

Пожалуйста, помогите мне. Я застрял здесь больше месяца.

0 ответов

Другие вопросы по тегам