2012-09-07 19 views
0

您好我正在開發一個應用程序,它將SMS發送到選定的聯繫人。選擇谷歌聯繫人時關閉geting force

來選擇聯繫人,我使用此代碼

public void selectRecipient(View V) 
     { 
       Intent pickContactIntent=new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
       startActivityForResult(pickContactIntent,1); 
     } 

我onActivityResult函數以下

@Override 
         protected void onActivityResult(int requestCode, int resultCode, Intent data) 
         { 
           // TODO Auto-generated method stub 
           super.onActivityResult(requestCode, resultCode, data); 

           if (resultCode == Activity.RESULT_OK) 
           { 

            if(requestCode==1) 
            { 
             count++; 
             Uri contactData = data.getData(); 
             Cursor c = managedQuery(contactData, null, null, null, null); 
             c.moveToFirst(); 
             name= c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
             String id = c.getString(c.getColumnIndex(Contacts._ID)); 
             Cursor cur =getContentResolver().query(CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null); 
             cur.moveToNext(); 

             String phoneNumber = cur.getString(cur.getColumnIndex(CommonDataKinds.Phone.NUMBER)); 
             } 
           } 
         }           

當我選擇在聯繫人列表中的任何谷歌接觸,我得到強制關閉。

如果我選擇一個手機聯繫人,然後它的工作正常。

我該怎麼辦才能糾正這個問題?

+0

你能發佈錯誤日誌消息嗎? – harshit

回答

1

您將需要檢查當前聯繫人是否至少有一個電話號碼使用ContactsContract.Contacts.HAS_PHONE_NUMBER並關閉Cursor使用Cursor.close();獲得電話號碼後。因此,更改您的代碼爲:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 
    switch(requestCode) 
    { 

     case (1) : 
     { 

     if (resultCode == Activity.RESULT_OK) 
     { 

     Uri contactData = data.getData(); 

     Cursor c = managedQuery(contactData, null, null, null, null); 

     c.moveToFirst(); 

     String phoneNumber=this.getContactPhone(c); 

     } 

     break; 

     } 

    } 




} 


private String getContactPhone(Cursor cursor) 
{ 

    int phoneColumn = cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);  
    int phoneNum = cursor.getInt(phoneColumn); 
    String phoneResult=""; 
    //System.out.print(phoneNum); 
    if (phoneNum > 0) 
    { 

     int idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID); 
     String contactId = cursor.getString(idColumn); 

      Cursor phones = getContentResolver().query( 
      ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
      null, 
      ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ " = " + contactId, 
      null, null); 
      //int phoneCount = phones.getCount(); 
      //allPhoneNum = new ArrayList<String>(phoneCount); 
      if (phones.moveToFirst()) 
      { 
        for (;!phones.isAfterLast();phones.moveToNext()) 
        {            
         int index = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
         int typeindex = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE); 
         int phone_type = phones.getInt(typeindex); 
         String phoneNumber = phones.getString(index); 
         switch(phone_type) 
         { 
          case 2: 
           phoneResult=phoneNumber; 
          break; 
         } 
          //allPhoneNum.add(phoneNumber); 
        } 
        if (!phones.isClosed()) 
        { 
          phones.close(); 
        } 
      } 
    } 
    return phoneResult; 
} 


,並確保你已經在AndroidManifest.xml以下權限。

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

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

感謝imraan,它的工作。 – kamal