【问题标题】:Android Get Random ContactAndroid 获取随机联系人
【发布时间】:2011-08-11 04:34:31
【问题描述】:

我正在尝试从手机的联系人列表中随机获取一个联系人,但没有明显减慢手机速度。这意味着我不能只抓取所有联系人并将它们放入一个数组中并从该数组中随机选择一个。我希望能够获得随机联系人,而不必先获得所有联系人。 这可能吗?如果可以,我将如何去做?

【问题讨论】:

    标签: android arrays random contacts


    【解决方案1】:

    更新为使用非弃用代码。根据这个答案查询:How to read contacts on Android 2.0

    Cursor managedCursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null); 
    

    那么只需要获取Cursor的大小即可:

    int size = managedCursor.getCount();
    

    随机取一个,阅读它并检查它是否有电话号码。如果没有,请选择另一个:

    boolean found = false;
    Random rnd = new Random();
    while(!found) {
      int index = rnd.nextInt(size);    
      managedCursor.moveToPosition(index);
      String name = managedCursor.getString(people.getColumnIndex(PhoneLookup.DISPLAY_NAME));
      found = Boolean.parseBoolean(managedCursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))); 
      if (found) {
        Cursor phones = getContentResolver().query( 
        ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
        ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null); 
        while (phones.moveToNext()) { 
         String phoneNumber = phones.getString(phones.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER));
         Log.d("Phone found:", phoneNumber);                 
        } 
        phones.close();
      }
    }
    

    我看不出你怎么能随机选择一个。除非它是一个非常大的联系人列表,否则这不会减慢电话速度。

    现在它会检查电话号码是否存在,如果找到就会读取所有电话号码。如果不是,它会选择另一个条目。

    【讨论】:

    • 这可能行得通,但 Contact.People 已被折旧,我宁愿不使用折旧代码。
    • @Elec0 非常正确。请参阅更新的回复。主要部分(选择随机联系人而不实际阅读所有联系人)仍然有效。
    • 好的。让我知道这种方法是否会降低您的应用速度。
    • 它没有,但现在我有另一个问题。我需要确保联系人有电话号码,因为我正在尝试发送短信。我不知道那会如何工作。
    • 这应该设置你。确保您查看我发布的链接,这是一个非常全面的答案。祝你好运。
    猜你喜欢
    • 2011-11-30
    • 2013-12-16
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    相关资源
    最近更新 更多