0

こんにちは私は選択した連絡先にSMSを送信するアプリに取り組んでいます。

連絡先を選択するにはこのコードを使用しています

    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));
                                      }
                                }
                         }                                          

連絡先リストでGoogleの連絡先を選択すると、強制終了します。

番号のある電話連絡先を選択すると、正常に機能しています。

これを修正するにはどうすればよいですか?

4

1 に答える 1

1

現在の連絡先に少なくとも1つの電話番号があることを確認する必要があります 。電話番号を取得した後、を使用ContactsContract.Contacts.HAS_PHONE_NUMBERして閉じます。したがって、コードを次のように変更します。CursorCursor.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" />
于 2012-09-07T04:17:13.300 に答える