【问题标题】:How to delete contacts from sim in android如何在android中从sim卡中删除联系人
【发布时间】:2014-10-05 03:08:50
【问题描述】:

我执行了以下代码来从 sim 卡中删除选定的联系人。但它没有删除,也没有抛出任何错误。

protected void DeleteContacts(ArrayList<String> ids){

        int flg = 0;

        String[] strids = new String[ids.size()];
        strids = ids.toArray(strids);

        for (int i = 0; i < strids.length; i++) {

            Cursor sims = getActivity().getContentResolver().query(
                    Uri.parse("content://icc/adn"), null,
                    "_id=?", new String[]{strids[i]}, null);

            sims.moveToFirst();
            if (sims.getCount()>0) {
                String phoneNumber = sims.getString(sims.getColumnIndex("number"));
                boolean val = deleteContact(phoneNumber);
                if (!val)
                    flg=1;
            }

            if (flg == 0)
                Toast.makeText(getActivity(), "Contact Deleted", Toast.LENGTH_SHORT).show();
            sims.close();
        }
    }

    public boolean deleteContact(String phone) {
        Cursor cur = getActivity().getContentResolver().query(Uri.parse("content://icc/adn"), null, "number=?", new String[] { phone }, null);
        try {
            if (cur.moveToFirst()) {
                do {
                    String lookupKey = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
                    Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey);
                    getActivity().getContentResolver().delete(uri, null, null);
                    return true;
                } while (cur.moveToNext());
            }
        } catch (Exception e) {
            System.out.println(e.getStackTrace());
        }
        return false;
    }

【问题讨论】:

  • 您在光标中获取 sim 的联系人?如果不是check this
  • 是的,在光标模拟游戏中..
  • @MysticMagic 我已经完成了 sim 联系人的获取.. 问题是,如何删除..
  • 好的。你添加权限了吗? ?
  • 是的,我也添加了..

标签: android android-contacts android-cursor


【解决方案1】:

您正在从 sqlite 数据库中删除联系人,而不是 SIM 卡。要从 SIM 卡中删除联系人,您只需要在 Uri.parse("content://icc/adn") uri 上删除。但要删除,您需要同时提供姓名和号码。名称列必须指定为标签。在此处检查删除方法https://android.googlesource.com/platform/frameworks/opt/telephony/+/9ebea45a36838f0547a9c30f7cd9c60b03aab3b4/src/java/com/android/internal/telephony/IccProvider.java

【讨论】:

    【解决方案2】:

    基于my answer here,解决方案如下:

    Uri simUri = Uri.parse("content://icc/adn/");
    ContentResolver mContentResolver = this.getContentResolver();
    Cursor c = mContentResolver.query(simUri, null, null, null, null);
    if (c.moveToFirst())
    {
        do
        {
            if (/* your condition here */)
            {
                mContentResolver.delete(
                    simUri,
                    "tag='" + c.getString(c.getColumnIndex("name")) +
                    "' AND " +
                    "number='" + c.getString(c.getColumnIndex("number")) + "'"
                    , null);
                break;
            }                       
        }
        while (c.moveToNext());
    }
    

    当然,不要忘记这些权限:

    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      • 1970-01-01
      • 2014-02-14
      相关资源
      最近更新 更多