添加通信记录联系人显示
This commit is contained in:
		@@ -1,8 +1,8 @@
 | 
				
			|||||||
#Created by .winboll/winboll_app_build.gradle
 | 
					#Created by .winboll/winboll_app_build.gradle
 | 
				
			||||||
#Thu Mar 06 20:00:52 HKT 2025
 | 
					#Thu Mar 06 13:42:11 GMT 2025
 | 
				
			||||||
stageCount=12
 | 
					stageCount=12
 | 
				
			||||||
libraryProject=
 | 
					libraryProject=
 | 
				
			||||||
baseVersion=1.0
 | 
					baseVersion=1.0
 | 
				
			||||||
publishVersion=1.0.11
 | 
					publishVersion=1.0.11
 | 
				
			||||||
buildCount=0
 | 
					buildCount=3
 | 
				
			||||||
baseBetaVersion=1.0.12
 | 
					baseBetaVersion=1.0.12
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,10 @@ package cc.winboll.studio.contacts.adapters;
 | 
				
			|||||||
 * @Date 2025/02/26 13:09:32
 | 
					 * @Date 2025/02/26 13:09:32
 | 
				
			||||||
 * @Describe CallLogAdapter
 | 
					 * @Describe CallLogAdapter
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					import android.content.ContentResolver;
 | 
				
			||||||
import android.content.Intent;
 | 
					import android.content.Intent;
 | 
				
			||||||
 | 
					import android.database.Cursor;
 | 
				
			||||||
 | 
					import android.provider.ContactsContract;
 | 
				
			||||||
import android.view.LayoutInflater;
 | 
					import android.view.LayoutInflater;
 | 
				
			||||||
import android.view.View;
 | 
					import android.view.View;
 | 
				
			||||||
import android.view.ViewGroup;
 | 
					import android.view.ViewGroup;
 | 
				
			||||||
@@ -17,15 +20,24 @@ import cc.winboll.studio.contacts.R;
 | 
				
			|||||||
import cc.winboll.studio.contacts.beans.CallLogModel;
 | 
					import cc.winboll.studio.contacts.beans.CallLogModel;
 | 
				
			||||||
import com.hjq.toast.ToastUtils;
 | 
					import com.hjq.toast.ToastUtils;
 | 
				
			||||||
import java.text.SimpleDateFormat;
 | 
					import java.text.SimpleDateFormat;
 | 
				
			||||||
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.HashMap;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Locale;
 | 
					import java.util.Locale;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					import cc.winboll.studio.contacts.utils.ContactUtils;
 | 
				
			||||||
 | 
					import android.content.Context;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class CallLogAdapter extends RecyclerView.Adapter<CallLogAdapter.CallLogViewHolder> {
 | 
					public class CallLogAdapter extends RecyclerView.Adapter<CallLogAdapter.CallLogViewHolder> {
 | 
				
			||||||
    public static final String TAG = "CallLogAdapter";
 | 
					    public static final String TAG = "CallLogAdapter";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private List<CallLogModel> callLogList;
 | 
					    private List<CallLogModel> callLogList;
 | 
				
			||||||
 | 
					    ContactUtils mContactUtils;
 | 
				
			||||||
 | 
					    Context mContext;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    public CallLogAdapter(List<CallLogModel> callLogList) {
 | 
					    public CallLogAdapter(Context context, List<CallLogModel> callLogList) {
 | 
				
			||||||
 | 
					        mContext = context;
 | 
				
			||||||
 | 
					        this.mContactUtils = ContactUtils.getInstance(mContext);
 | 
				
			||||||
        this.callLogList = callLogList;
 | 
					        this.callLogList = callLogList;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -39,7 +51,7 @@ public class CallLogAdapter extends RecyclerView.Adapter<CallLogAdapter.CallLogV
 | 
				
			|||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void onBindViewHolder(@NonNull CallLogViewHolder holder, int position) {
 | 
					    public void onBindViewHolder(@NonNull CallLogViewHolder holder, int position) {
 | 
				
			||||||
        final CallLogModel callLog = callLogList.get(position);
 | 
					        final CallLogModel callLog = callLogList.get(position);
 | 
				
			||||||
        holder.phoneNumber.setText(callLog.getPhoneNumber());
 | 
					        holder.phoneNumber.setText(callLog.getPhoneNumber() + " ☎ " + mContactUtils.getContactsName(callLog.getPhoneNumber()));
 | 
				
			||||||
        holder.callStatus.setText(callLog.getCallStatus());
 | 
					        holder.callStatus.setText(callLog.getCallStatus());
 | 
				
			||||||
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
 | 
					        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
 | 
				
			||||||
        holder.callDate.setText(dateFormat.format(callLog.getCallDate()));
 | 
					        holder.callDate.setText(dateFormat.format(callLog.getCallDate()));
 | 
				
			||||||
@@ -75,5 +87,6 @@ public class CallLogAdapter extends RecyclerView.Adapter<CallLogAdapter.CallLogV
 | 
				
			|||||||
            dialButton = itemView.findViewById(R.id.dial_button);
 | 
					            dialButton = itemView.findViewById(R.id.dial_button);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -65,7 +65,7 @@ public class CallLogFragment extends Fragment {
 | 
				
			|||||||
        super.onViewCreated(view, savedInstanceState);
 | 
					        super.onViewCreated(view, savedInstanceState);
 | 
				
			||||||
        recyclerView = view.findViewById(R.id.recyclerView);
 | 
					        recyclerView = view.findViewById(R.id.recyclerView);
 | 
				
			||||||
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
 | 
					        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
 | 
				
			||||||
        callLogAdapter = new CallLogAdapter(callLogList);
 | 
					        callLogAdapter = new CallLogAdapter(getContext(), callLogList);
 | 
				
			||||||
        recyclerView.setAdapter(callLogAdapter);
 | 
					        recyclerView.setAdapter(callLogAdapter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (ActivityCompat.checkSelfPermission(requireContext(), Manifest.permission.READ_CALL_LOG)!= PackageManager.PERMISSION_GRANTED) {
 | 
					        if (ActivityCompat.checkSelfPermission(requireContext(), Manifest.permission.READ_CALL_LOG)!= PackageManager.PERMISSION_GRANTED) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,62 @@
 | 
				
			|||||||
 | 
					package cc.winboll.studio.contacts.utils;
 | 
				
			||||||
 | 
					import android.content.ContentResolver;
 | 
				
			||||||
 | 
					import android.content.Context;
 | 
				
			||||||
 | 
					import android.database.Cursor;
 | 
				
			||||||
 | 
					import android.provider.ContactsContract;
 | 
				
			||||||
 | 
					import java.util.HashMap;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @Author ZhanGSKen@AliYun.Com
 | 
				
			||||||
 | 
					 * @Date 2025/03/06 21:08:16
 | 
				
			||||||
 | 
					 * @Describe ContactUtils
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class ContactUtils {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static final String TAG = "ContactUtils";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Map<String, String> contactMap = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static volatile ContactUtils _ContactUtils;
 | 
				
			||||||
 | 
					    Context mContext;
 | 
				
			||||||
 | 
					    ContactUtils(Context context) {
 | 
				
			||||||
 | 
					        mContext = context;
 | 
				
			||||||
 | 
					        relaodContacts();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    public synchronized static ContactUtils getInstance(Context context) {
 | 
				
			||||||
 | 
					        if (_ContactUtils == null) {
 | 
				
			||||||
 | 
					            _ContactUtils = new ContactUtils(context);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return _ContactUtils;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void relaodContacts() {
 | 
				
			||||||
 | 
					        readContacts();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private void readContacts() {
 | 
				
			||||||
 | 
					        contactMap.clear();
 | 
				
			||||||
 | 
					        ContentResolver contentResolver = mContext.getContentResolver();
 | 
				
			||||||
 | 
					        Cursor cursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
 | 
				
			||||||
 | 
					                                              null, null, null, null);
 | 
				
			||||||
 | 
					        if (cursor != null) {
 | 
				
			||||||
 | 
					            while (cursor.moveToNext()) {
 | 
				
			||||||
 | 
					                String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
 | 
				
			||||||
 | 
					                String phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
 | 
				
			||||||
 | 
					                //Map<String, String> contactMap = new HashMap<>();
 | 
				
			||||||
 | 
					                contactMap.put(getSimplePhone(phoneNumber), displayName);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            cursor.close();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        // 此时 contactList 就是存储联系人信息的 Map 列表
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getContactsName(String phone) {
 | 
				
			||||||
 | 
					        String result = contactMap.get(getSimplePhone(phone));
 | 
				
			||||||
 | 
					        return result == null ? "[NoInContacts]" : result;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static String getSimplePhone(String phone) {
 | 
				
			||||||
 | 
					        return phone.replaceAll("[+\\s]", "");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user