首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获取双卡通话记录?

如何获取双卡通话记录?
EN

Stack Overflow用户
提问于 2018-05-04 19:28:31
回答 2查看 1.7K关注 0票数 0

如何在android中获取双卡通话记录。我按照下面的链接获取了dual sim呼叫日志,但是这个方法总是返回-1。我尝试了其他堆栈溢出,没有太多的双卡通话日志应答,可从api 21获得。https://stackoverflow.com/a/23907166/6891712

我试过使用下面的方法,它只给出了呼叫的详细信息,但找不到该呼叫是从哪个SIM卡拨打或接收的

代码语言:javascript
运行
复制
private void getCalldetailsNow() {

         @SuppressLint("MissingPermission") Cursor managedCursor=c.getContentResolver().query(CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DATE + " DESC");

        int number = 0;
        if (managedCursor != null) {
            number = managedCursor.getColumnIndex( CallLog.Calls.NUMBER );
        }
        int duration1 = managedCursor.getColumnIndex( CallLog.Calls.DURATION);
        int type1=managedCursor.getColumnIndex(CallLog.Calls.TYPE);
        int date1=managedCursor.getColumnIndex(CallLog.Calls.DATE);
        int idSimId = getSimIdColumn(managedCursor);

        if( managedCursor.moveToFirst() == true ) {
            String phNumber = managedCursor.getString(number);
            String callDuration = managedCursor.getString(duration1);

            String type=managedCursor.getString(type1);
            String date=managedCursor.getString(date1);
            String gettSimNumber=managedCursor.getString(idSimId);

            String dir = null;
            int dircode = Integer.parseInt(type);
            switch (dircode)
            { 
            case CallLog.Calls.OUTGOING_TYPE:
                dir = "OUTGOING";
                break;
            case CallLog.Calls.INCOMING_TYPE:
                dir = "INCOMING";
                break;
            case CallLog.Calls.MISSED_TYPE:
                dir = "MISSED";
                break;
            default: 
                dir = "MISSED";
                break;
            }       
        }

        managedCursor.close();
    }


public static int getSimIdColumn(final Cursor c) {

        for (String s : new String[] { "sim_id", "simid", "sub_id" }) {
            int id = c.getColumnIndex(s);
            if (id >= 0) {

                Log.d(" Simmmm", "sim_id column found: " + s);
                return id;
            }
        }
        Log.d(" Simmmm", "no sim_id column found");
        return -1;
    }
EN

回答 2

Stack Overflow用户

发布于 2018-05-04 20:08:18

尝试使用此方法读取sim卡联系人..

如果你想读取第一个设备存储联系人,然后实现到实现LoaderManager.LoaderCallbacks到类..

代码语言:javascript
运行
复制
    @Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {

    return new CursorLoader(getActivity(),
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI, ProfileQuery.PROJECTION,
            // Select only email addresses
            null, null, null);
}

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    List<String> numbers = new ArrayList<>();

    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        String phoneNumber = cursor.getString(ProfileQuery.NUMBER).replaceAll("\\D", "");

        CustomLogHandler.printDebuglog(TAG, "onLoadFinished: " + phoneNumber);

        if (!TextUtils.isEmpty(phoneNumber) && !phoneNumber.startsWith(Constants.SP_COUNTRY_CODE)) {
            mCountryCodeList.add(new StringBuilder().append(Constants.SP_COUNTRY_CODE).toString());
            alPhoneNumbers.add(new StringBuilder().append(Constants.SP_COUNTRY_CODE).append(phoneNumber).toString());
        } else {
            mCountryCodeList.add(new StringBuilder().append(Constants.SP_COUNTRY_CODE).toString());
            alPhoneNumbers.add(phoneNumber);
        }
        names.add(cursor.getString(ProfileQuery.NAME));
        cursor.moveToNext();
    }
    allPhoneNumberName.addAll(names);
}

该下级读取SIM卡数据..

代码语言:javascript
运行
复制
private class ReadContactFromSIMCard extends AsyncTask<Object, Object, Object> {

    @Override
    protected void onPostExecute(Object o) {
        super.onPostExecute(o);
        requestForContact();
    }

    @Override
    protected Object doInBackground(Object[] params) {

        Cursor cursorSim = null;
        try {
            String phoneNo;
            String name;
            Uri simUri = Uri.parse("content://icc/adn");
            cursorSim = getActivity().getContentResolver().query(simUri, null, null, null, null);

            if (cursorSim != null) {
                while (cursorSim.moveToNext()) {
                    name = cursorSim.getString(cursorSim.getColumnIndex("name"));
                    phoneNo = cursorSim.getString(cursorSim.getColumnIndex("number"));
                    if (!TextUtils.isEmpty(name)) {
                        allPhoneNumberName.add(name);
                    }
                    if (!TextUtils.isEmpty(phoneNo)) {
                        phoneNo.replaceAll("\\D", "");
                        phoneNo.replaceAll("&", "");

                        if (!TextUtils.isEmpty(phoneNo) && !phoneNo.startsWith(Constants.SP_COUNTRY_CODE)) {
                            mCountryCodeList.add(Constants.SP_COUNTRY_CODE);
                            alPhoneNumbers.add(Constants.SP_COUNTRY_CODE + phoneNo);
                        } else {
                            mCountryCodeList.add(Constants.SP_COUNTRY_CODE);
                            alPhoneNumbers.add(phoneNo);
                        }
                    }
                }
            }
        } catch (Throwable e) {
            CustomLogHandler.printErrorlog(e);
        } finally {
            if (cursorSim != null) {
                cursorSim.close();
            }
        }
        return null;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        getLoaderManager().initLoader(0, null, FindFriendsFragment.this);
    }
}

获取呼叫日志详细信息...

代码语言:javascript
运行
复制
private void getCallDetails() {
    StringBuffer sb = new StringBuffer();
    Uri contacts = CallLog.Calls.CONTENT_URI;
    Cursor managedCursor = this.getContentResolver().query(contacts, null, null, null, null);
    int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER);
    int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE);
    int date = managedCursor.getColumnIndex(CallLog.Calls.DATE);
    int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION);
    sb.append("Call Details :");
    while (managedCursor.moveToNext()) {

        HashMap rowDataCall = new HashMap<String, String>();

        String phNumber = managedCursor.getString(number);
        String callType = managedCursor.getString(type);
        String callDate = managedCursor.getString(date);
        String callDayTime = new Date(Long.valueOf(callDate)).toString();
        // long timestamp = convertDateToTimestamp(callDayTime);
        String callDuration = managedCursor.getString(duration);
        String dir = null;
        int dircode = Integer.parseInt(callType);
        switch (dircode) {
            case CallLog.Calls.OUTGOING_TYPE:
                dir = "OUTGOING";
                break;

            case CallLog.Calls.INCOMING_TYPE:
                dir = "INCOMING";
                break;

            case CallLog.Calls.MISSED_TYPE:
                dir = "MISSED";
                break;
        }
        sb.append("\nPhone Number:--- " + phNumber + " \nCall Type:--- " + dir + " \nCall Date:--- " + callDayTime + " \nCall duration in sec :--- " + callDuration);
        sb.append("\n----------------------------------");
        Uri allCalls = Uri.parse("content://call_log/calls");
        Cursor c = managedQuery(allCalls, null, null, null, null);
        String id = c.getString(c.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_ID));
        Log.d("sim",id);


    }
    managedCursor.close();
    System.out.println(sb);
}

我希望您在android清单文件中添加以下权限..

代码语言:javascript
运行
复制
    <uses-permission android:name="android.permission.READ_CALL_LOG" />
票数 0
EN

Stack Overflow用户

发布于 2018-05-07 11:02:38

也许您可以通过get "Calls.PHONE_ACCOUNT_ID“项获得subscription_id,该项称为”用于发出或接收呼叫的帐户的标识符“。

在获得匹配插槽id的subscription_id之后,例如,插槽0是subscription_id 0,插槽id 1是subscription_id 1,然后可以使用getSlotIndex使用giveb subid,然后可以使用此slotid查询从此插槽或到此插槽的呼叫。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50173859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档