亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 sdk 27?? 在 android studio 中顯示列表聯系人電話

如何使用 sdk 27?? 在 android studio 中顯示列表聯系人電話

慕的地6264312 2022-05-25 15:58:54
我有代碼 java android studio 可以在 hp 中顯示列表聯系人,并且已獲得許可,但它在 sdk > 27 中不起作用(空白值)有人幫助我嗎?這是我的代碼    contactModelArrayList = new ArrayList<>();    Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,            null,            ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'",            null,            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+" COLLATE LOCALIZED ASC");    while (phones.moveToNext())    {        String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));        String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));        ContactModel contactModel = new ContactModel();        contactModel.setName(name);        contactModel.setNumber(phoneNumber);        contactModelArrayList.add(contactModel);        Log.d("name>>",name+" "+phoneNumber);    }    Log.d("phones", phones.toString());    phones.close();    contactAllAdapter = new ContactAllAdapter(this,contactModelArrayList);    listView.setAdapter(contactAllAdapter);在 logcat 中什么都沒有
查看完整描述

2 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

像這樣創建您的MyCircleContactListData類


public class MyCircleContactListData {

    @SerializedName("name")

    @Expose

    public String name;

    @SerializedName("img_url")

    @Expose

    public String imgUrl;


    @SerializedName("mobile_no")

    @Expose

    public String mobileNumber;

}

然后使用聯系人列表返回類型方法 getContacts 創建聯系人訪問Java 類,該方法返回您的聯系人列表。


 public class GetContactFromDevice {

    private static final String TAG  = "GetContactFromDevice";


    public ArrayList<MyCircleContactListData> getContacts(Context context) {

        ArrayList<MyCircleContactListData> list = new ArrayList<>();

        ContentResolver contentResolver = context.getContentResolver();

        Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

        if (cursor.getCount() > 0) {

            while (cursor.moveToNext()) {

                String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));

                if (cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)) > 0) {

                    Cursor cursorInfo = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,

                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null);

                    InputStream inputStream = ContactsContract.Contacts.openContactPhotoInputStream(context.getContentResolver(),

                            ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, new Long(id)));


                    Uri person = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, new Long(id));

                    Uri pURI = Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);


                    Bitmap photo = null;

                    if (inputStream != null) {

                        photo = BitmapFactory.decodeStream(inputStream);

                    }

                    while (cursorInfo.moveToNext()) {


                        MyCircleContactListData info = new MyCircleContactListData("", "", "", "", false);

                        info.name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

                        info.mobileNumber = TextUtils.validatePhoneNumber(cursorInfo.getString(cursorInfo.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));

                        info.imgUrl= pURI.toString();

                        list.add(info);


                        Log.d("GetContactFromDevice", "getContacts: " + info.name);

                        Log.d("GetContactFromDevice", "getContacts: " + info.mobileNumber);

                    }


                    cursorInfo.close();

                }

            }

            cursor.close();

        }

        return list;

    }


}

不要忘記提供聯系人訪問權限


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

然后顯示您的聯系人列表。


GetContactFromDevice getContactFromDevice = new GetContactFromDevice();

contactAllAdapter = new ContactAllAdapter(this,getContactFromDevice.getContacts(this));

listView.setAdapter(contactAllAdapter);


查看完整回答
反對 回復 2022-05-25
?
慕娘9325324

TA貢獻1783條經驗 獲得超5個贊

你可以試試LoaderManager


創建以下字段


private static final int CONTACTS_LOADER_ID = 101;


private static final String[] PROJECTION = {

        ContactsContract.Contacts._ID,

        ContactsContract.Contacts.DISPLAY_NAME_PRIMARY,

        ContactsContract.CommonDataKinds.Phone.NUMBER

};

創建以下類


public class Contact {


    private String id;

    private String name;

    private String number;


    public Contact(String id, String name, String number) {

        this.id = id;

        this.name = name;

        this.number = number;

    }


    public String getId() {

        return id;

    }


    public void setId(String id) {

        this.id = id;

    }


    public String getName() {

        return name;

    }


    public void setName(String name) {

        this.name = name;

    }


    public String getNumber() {

        return number;

    }


    public void setNumber(String number) {

        this.number = number;

    }


}

[1] 創建實例LoaderManager.LoaderCallback


private LoaderManager.LoaderCallbacks<Cursor> loaderCallbacks = new LoaderManager.LoaderCallbacks<Cursor>() {

        @Override

        public Loader<Cursor> onCreateLoader(int id, Bundle args) {


            switch (id) {

                case CONTACTS_LOADER_ID:


                    return new CursorLoader(

                            getActivity(),

                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,

                            PROJECTION,

                            null,

                            null,

                            ContactsContract.Contacts.DISPLAY_NAME_PRIMARY + " ASC"

                    );

                default:

                    return null;

            }

        }


        @Override

        public void onLoadFinished(Loader<Cursor> loader, Cursor data) {

            switch (loader.getId()) {

                case CONTACTS_LOADER_ID:


                   //Use ContactUtils class here



                    break;

            }

        }


        @Override

        public void onLoaderReset(Loader<Cursor> loader) {


        }

    };

[2] 使用以下類將游標數據轉換為List<Contact>


import android.content.ContentResolver;

import android.database.Cursor;

import android.provider.ContactsContract;


import java.util.ArrayList;

import java.util.List;


public class ContactUtils {


    private ContactUtils() {

    }


    public static List<Contact> parseContacts(Cursor cursor) {

        List<Contact> contacts = new ArrayList<>();


        if (cursor.getCount() == 0) {

            return contacts;

        }


        int nameColumnIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME_PRIMARY);

        int idColumnIndex = cursor.getColumnIndex(ContactsContract.Contacts._ID);

        int numberColumnIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);


        while (cursor.moveToNext()) {

            String contactName = cursor.getString(nameColumnIndex);

            String id = cursor.getString(idColumnIndex);

            String number = cursor.getString(numberColumnIndex);


            Contact contact = new Contact(id, contactName, number);

            if(!isContactAddedInList(contact, contacts)){

                contacts.add(contact);

            }


        }


        return contacts;

    }


public boolean isContactAddedInList(Contact contact, List<Contact> contacts) {


    for (Contact listContact : contacts

            ) {

        if (listContact.number.equals(contact.name)) {

            return true;

        }

    }


    return false;

}



}

[3] 在你的 Fragment 或 Activity 的方法中調用getLoaderManager().initLoader方法來加載聯系人onStart


getLoaderManager().initLoader(CONTACTS_LOADER_ID, null, loaderCallbacks);

在清單文件中添加 <uses-permission android:name="android.permission.READ_CONTACTS" />權限

您需要在調用之前請求運行時權限 getLoaderManager().initLoader


查看完整回答
反對 回復 2022-05-25
  • 2 回答
  • 0 關注
  • 220 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號