Удалить контакт, работающий на эмуляторе, но не на устройстве - PullRequest
0 голосов
/ 12 марта 2012

Я написал заявление, чтобы удалить контакт из списка контактов в Android. он работает нормально в эмуляторе, но не удаляет контакт в устройстве. В чем может быть проблема? Я публикую свой код. Пожалуйста, помогите мне.

ArrayList ops = new ArrayList ();

String [] args = new String [] {contactId};

         // if id is raw contact id
         ops.add(ContentProviderOperation.newDelete(RawContacts.CONTENT_URI).withSelection(RawContacts._ID + "=?", args) .build()); 

         // if id is contact id
         //ops.add(ContentProviderOperation.newDelete(RawContacts.CONTENT_URI).withSelection(RawContacts.CONTACT_ID + "=?", args) .build());
         try {
            getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
        } catch (RemoteException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (OperationApplicationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

Нахождение контакта осуществляется с помощью этого кода

String get_Number (String name) {

String number = null;

    String where= "DISPLAY_NAME like ?";
    Cursor  people = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, where, new String[]{name}, null);
        people.moveToFirst();  

                try{
                    contactId = people.getString(people.getColumnIndex(ContactsContract.Contacts._ID)); //this is the ID used to delete contact
                    String hasPhone = people.getString(people.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
                    if ( hasPhone.equalsIgnoreCase("1"))
                        hasPhone = "true";
                    else
                        hasPhone = "false" ;
                    if (Boolean.parseBoolean(hasPhone)) 
                    {
                        Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);
                        while (phones.moveToNext()) 
                        {
                            number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                           // mConno.add(position,phoneNumber);

                        }
                        phones.close(); 
                    }   

                }       
                catch(Exception e)
                { 

                }



    return number;


}

и разрешения, установленные в манифесте:

 <uses-permission android:name="android.permission.READ_CONTACTS"/>
 <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
<uses-permission android:name="android.permission.SEND_SMS"/>
 <uses-permission android:name="android.permission.WRITE_SMS" />

Только что я обнаружил странное поведение этого приложения, которое разработал. перед этим приложением удалить контакт, я разработал приложение «добавить контакт».

Итак, что происходит? Он не может удалить контакты, добавленные приложением «Добавить контакт», но удаляет контакты, которые были добавлены вручную. Почему происходит эта странная вещь.

Но в эмуляторе все работает нормально. но не на мобильном. что идет не так ??

1 Ответ

0 голосов
/ 27 мая 2015

Вы пытаетесь удалить необработанный контакт , используя контакт id.Это не сработает.

Контакт состоит из нескольких необработанных контактов, при удалении контакта также удаляются все необработанные контакты.

Сделайте это:

long contactId = 12345;
Uri contactUri = Uri.withAppendedPath(Contacts.CONTENT_URI, String.valueOf(contactId));
int deleted = getContentResolver().delete(contactUri, null, null);

удалено будет 1, если операция прошла успешно.

...