网站备案 地址,阿里云linux服务器搭建多个网站,做微网站哪家好,西安seo培训机构排名一、实验目的#xff08;如果代码有错漏#xff0c;可在代码地址查看#xff09; 1.熟悉内容提供者(Content Provider)的概念和作用。 2.掌握内容提供者的创建和使用方法。 4.掌握内容URI的结构和用途。 二、实验条件
1.熟悉内容提供者的工作原理。
2.掌握内容提供者访问其…一、实验目的如果代码有错漏可在代码地址查看 1.熟悉内容提供者(Content Provider)的概念和作用。 2.掌握内容提供者的创建和使用方法。 4.掌握内容URI的结构和用途。 二、实验条件
1.熟悉内容提供者的工作原理。
2.掌握内容提供者访问其他应用程序数据的方式。
三、实验内容
1.创建程序添加recyclerview库。
2.添加界面控件取消默认标题栏。
3.搭建通讯录列表条目界面布局。
4.封装联系人信息实体类。
5.编写通讯录列表的适配器。
6.实现显示通讯录界面数据的功能。
7.添加读取系统通讯录的权限运行程序。
四、实验指导 正在layout包下 1.activity_main.xml ?xml version1.0 encodingutf-8?
androidx.constraintlayout.widget.ConstraintLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.MainActivityTextViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textHello World!app:layout_constraintBottom_toBottomOfparentapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toTopOfparent //androidx.constraintlayout.widget.ConstraintLayout 2.activity_contact.xml ?xml version1.0 encodingutf-8?
LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticaltools:context.ContactActivityTextViewandroid:idid/textViewandroid:layout_widthmatch_parentandroid:layout_height50dpandroid:gravitycenterandroid:padding5dpandroid:background#BFDC9Eandroid:textSize20spandroid:textColorcolor/blackandroid:text通讯录 /androidx.recyclerview.widget.RecyclerViewandroid:idid/rv_contactandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:layout_margin2dpandroid:background#F2F4E2/
/LinearLayout 3.contact_item ?xml version1.0 encodingutf-8?
RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:layout_margin5dpandroid:padding8dpandroid:backgrounddrawable/item_bgImageViewandroid:idid/iv_photoandroid:layout_width60dpandroid:layout_height60dpandroid:layout_centerVerticaltrueapp:srcCompatdrawable/user /TextViewandroid:idid/tv_nameandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_alignTopid/iv_photoandroid:layout_marginTop5dpandroid:layout_toEndOfid/iv_photoandroid:layout_marginStart20dpandroid:textColorcolor/blackandroid:text李雷 /TextViewandroid:idid/tv_phoneandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_alignBottomid/iv_photoandroid:layout_marginBottom5dpandroid:layout_toEndOfid/iv_photoandroid:layout_marginStart20dpandroid:textColorcolor/blackandroid:text13520677894 /
/RelativeLayout Java代码 package cn.itcast.contacts;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import android.annotation.SuppressLint;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.os.Build;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.Toast;import java.util.ArrayList;
import java.util.List;public class ContactActivity extends AppCompatActivity {private RecyclerView recyclerView;SuppressLint(MissingInflatedId)Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_contact);init();}private void init() {recyclerView findViewById(R.id.rv_contact);recyclerView.setLayoutManager(new LinearLayoutManager(this));getPermissions();}String[] permissionList;//申请权限public void getPermissions() {if (Build.VERSION.SDK_INT Build.VERSION_CODES.M) {permissionList new String[]{android.permission.READ_CONTACTS};ArrayListString list new ArrayList();for (String s : permissionList) {if (ActivityCompat.checkSelfPermission(ContactActivity.this, s) !PackageManager.PERMISSION_GRANTED) {list.add(s);}}if (list.size() 0) {ActivityCompat.requestPermissions(ContactActivity.this, list.toArray(list.toArray(new String[list.size()])),1);} else {setDate();}} else {setDate();}}Overridepublic void onRequestPermissionsResult(int requestCode, NonNull String[] permissions, NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if (requestCode 1) {for (int i 0; i permissions.length; i ) {if(permissions[i].equals(android.permission.READ_CONTACTS) grantResults[i] PackageManager.PERMISSION_GRANTED) {Toast.makeText(this, 读取通讯录权限申请成功, Toast.LENGTH_SHORT).show();setDate();} else {Toast.makeText(this, 读取通讯录权限申请失败, Toast.LENGTH_SHORT).show();}}}}private void setDate() {ListContactInfo contactInfoList getContacts();ContactAdapter adapter new ContactAdapter(ContactActivity.this , contactInfoList);recyclerView.setAdapter(adapter);}//获取通讯录数据private ListContactInfo getContacts() {ListContactInfo contactInfos new ArrayList();Cursor cursor getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null);while ( cursor.moveToNext() ) {SuppressLint(Range) String id cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));SuppressLint(Range) String name cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));SuppressLint(Range) int isHas cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));if (isHas 0) {Cursor cursor1 getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID id,null, null);while (cursor1.moveToNext()) {ContactInfo contactInfo new ContactInfo();contactInfo.setContactName(name);SuppressLint(Range) String number cursor1.getString(cursor1.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)).trim();number number.replace( ,);number number.replace(-,);contactInfo.setPhoneNumber(number);contactInfos.add(contactInfo);}cursor1.close();}}cursor.close();return contactInfos;}
}
package cn.itcast.contacts;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;import java.util.List;public class ContactAdapter extends RecyclerView.AdapterContactAdapter.MyViewHolder {private Context context;private ListContactInfo contactInfoList;public ContactAdapter(Context context, ListContactInfo contactInfoList) {this.context context;this.contactInfoList contactInfoList;}NonNullOverridepublic MyViewHolder onCreateViewHolder(NonNull ViewGroup parent, int viewType) {MyViewHolder holder new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.contact_item,parent,false));return holder;}Overridepublic void onBindViewHolder(NonNull MyViewHolder holder, int position) {holder.tv_name.setText((CharSequence) contactInfoList.get(position).getContactName());holder.tv_phone.setText((CharSequence) contactInfoList.get(position).getPhoneNumber());}Overridepublic int getItemCount() {return contactInfoList.size();}class MyViewHolder extends RecyclerView.ViewHolder {TextView tv_name, tv_phone;ImageView iv_photo;public MyViewHolder(NonNull View itemView) {super(itemView);iv_photo itemView.findViewById(R.id.iv_photo);tv_name itemView.findViewById(R.id.tv_name);tv_phone itemView.findViewById(R.id.tv_phone);}}
}
package cn.itcast.contacts;public class ContactInfo {private String contactName;private String phoneNumber;public String getContactName() {return contactName;}public void setContactName(String contactName) {this.contactName contactName;}public String getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber phoneNumber;}
} package cn.itcast.contacts;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}
} 五代码下载地址 android: 实现注册界面、实现注册界面、饭堂小广播、音乐播放器、记事本、读取手机通讯录、学生管理系统 - Gitee.com