android获取手机联系人

implementation 'com.google.code.gson:gson:2.2.4'
implementation 'com.android.support:recyclerview-v7:27.1.0'
implementation 'com.android.support:support-v4:27.1.1'
implementation 'org.xutils:xutils:3.3.36'
implementation 'com.squareup.picasso:picasso:2.3.2'

implementation 'com.android.support:design:27.1.1'

public class MainActivity extends AppCompatActivity {
    private int count=3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        handler.sendEmptyMessageDelayed(99,1000);
    }

    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (count < 0 ) {// 跳转
                startActivity(new Intent(MainActivity.this,
                        Main2Activity.class));
                finish();
            } else {// 倒计时处理
                count--;
                handler.sendEmptyMessageDelayed(99, 1000);
            }
        }
    };
}
public class Main2Activity extends AppCompatActivity {
    ViewPager viewPager;
    TabLayout tabLayout;
    List<String> titles=new ArrayList<>();
    List<Fragment> data=new ArrayList<>();
    MyAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        viewPager=findViewById(R.id.viewpager);
        tabLayout=findViewById(R.id.tablayout);

        titles.add("一");
        titles.add("二");
        titles.add("三");


        data.add(new diyi());
        data.add(new dier());
        data.add(new disan());


        adapter=new MyAdapter(getSupportFragmentManager());
        viewPager.setAdapter(adapter);
        tabLayout.setupWithViewPager(viewPager);


    }

    class MyAdapter extends FragmentPagerAdapter {

        public MyAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            return data.get(position);
        }

        @Override
        public int getCount() {
            return data.size();
        }

        @Nullable
        @Override
        public CharSequence getPageTitle(int position) {
            return titles.get(position);
        }
    }
}

activity_main2.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".Main2Activity">

    <android.support.design.widget.TabLayout
        android:id="@+id/tablayout"
        android:background="#c0ffd2"
        android:layout_width="match_parent"
        android:layout_height="60dp">

    </android.support.design.widget.TabLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp">

    </android.support.v4.view.ViewPager>

</LinearLayout>

public class diyi extends Fragment {
    private RecyclerView mRecyclerView;
    private List<ks> list;
    private Button button;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View inflate = inflater.inflate(R.layout.diyi, container, false);
        mRecyclerView = inflate.findViewById(R.id.recyclerview);

        button = inflate.findViewById(R.id.button);


        try {
            InputStream open = getActivity().getAssets().open("yy.xml");
            List<ks> domxml = domxml(open);
            mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false));

            ReAdapter reAdapter = new ReAdapter(getActivity(), domxml);
            mRecyclerView.setAdapter(reAdapter);

        } catch (Exception e) {
            e.printStackTrace();
        }

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String json = new Gson().toJson(list);
                Toast.makeText(getActivity(), "Json:" + json, Toast.LENGTH_SHORT).show();
                saveData(json);
            }
        });
        return inflate;
    }

    private void saveData(String json) {
        String path = Environment.getExternalStorageDirectory().getAbsolutePath();
        String fileName = "my.json";
        File file = new File(path + File.separator + fileName);
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file));
            bufferedWriter.write(json);
            bufferedWriter.flush();
            bufferedWriter.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public List<ks> domxml(InputStream is) throws Exception {
        //一系列的初始化
        list = new ArrayList<>();
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        //获得Document对象
        Document document = builder.parse(is);
        //获得ks的List
        NodeList kssList = document.getElementsByTagName("ks");
        //遍历ks标签
        for (int i = 0; i < kssList.getLength(); i++) {
            //获得ks标签
            Node node_ks = kssList.item(i);
            //获得ks里面的标签
            NodeList ksNodes = node_ks.getChildNodes();
            //新建ks对象
            ks k = new ks();
            //遍历ks标签里面的标签
            for (int j = 0; j < ksNodes.getLength(); j++) {
                Node ksNode = ksNodes.item(j);
                if ("kh".equals(ksNode.getNodeName())) {
                    String kh = ksNode.getTextContent();
                    k.setKh(kh);
                } else if ("xm".equals(ksNode.getNodeName())) {
                    String xm = ksNode.getTextContent();
                    k.setXm(xm);
                } else if ("jx".equals(ksNode.getNodeName())) {
                    String jx = ksNode.getTextContent();
                    k.setJx(jx);
                } else if ("cj".equals(ksNode.getNodeName())) {
                    String cj = ksNode.getTextContent();
                    k.setCj(cj);
                }
            }

            list.add(k);
        }

        return list;
    }
}


public class ReAdapter extends RecyclerView.Adapter<ReAdapter.Holder> {
    private Context context;
    private List<ks> dybean;

    public ReAdapter(Context context, List<ks> dybean) {
        this.context = context;
        this.dybean = dybean;
    }

    @NonNull
    @Override
    public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(context).inflate(R.layout.diyi_item,parent,false);
        Holder holder=new Holder(view);

        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull Holder holder, int position) {

        holder.item_kh.setText(dybean.get(position).getKh());
        holder.item_xm.setText(dybean.get(position).getXm());
        holder.item_jx.setText(dybean.get(position).getJx());
        holder.item_cj.setText(dybean.get(position).getCj());

    }

    @Override
    public int getItemCount() {
        return dybean.size();
    }

    class Holder extends RecyclerView.ViewHolder {
        private TextView item_kh;
        private TextView item_xm;
        private TextView item_jx;
        private TextView item_cj;

        public Holder(View itemView) {
            super(itemView);

            item_kh=itemView.findViewById(R.id.item_kh);
            item_xm=itemView.findViewById(R.id.item_xm);
            item_jx=itemView.findViewById(R.id.item_jx);
            item_cj=itemView.findViewById(R.id.item_cj);

        }
    }
}


public class dier extends Fragment {
    private RecyclerView mRecyclerView;
    private ArrayList<HashMap<String, String>> list;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View inflate=inflater.inflate(R.layout.dier,container,false);
        mRecyclerView=inflate.findViewById(R.id.recyclerview);


        list = new ArrayList<HashMap<String, String>>();
        // 1.获取内容解析者
        ContentResolver resolver = getActivity().getContentResolver();
        // 2.获取内容提供者的地址:com.android.contacts
        // raw_contacts表的地址 :raw_contacts
        // view_data表的地址 : data
        // 3.生成查询地址
        Uri raw_uri = Uri.parse("content://com.android.contacts/raw_contacts");
        Uri date_uri = Uri.parse("content://com.android.contacts/data");
        // 4.查询操作,先查询raw_contacts,查询contact_id
        // projection : 查询的字段
        Cursor cursor = resolver.query(raw_uri, new String[] { "contact_id" },
                null, null, null);
        // 5.解析cursor
        while (cursor.moveToNext()) {
            // 6.获取查询的数据
            String contact_id = cursor.getString(0);
            // cursor.getString(cursor.getColumnIndex("contact_id"));//getColumnIndex
            // : 查询字段在cursor中索引值,一般都是用在查询字段比较多的时候
            // 判断contact_id是否为空
            if (!TextUtils.isEmpty(contact_id)) {//null   ""
                // 7.根据contact_id查询view_data表中的数据
                // selection : 查询条件
                // selectionArgs :查询条件的参数
                // sortOrder : 排序
                // 空指针: 1.null.方法 2.参数为null
                Cursor c = resolver.query(date_uri, new String[] { "data1",
                                "mimetype" }, "raw_contact_id=?",
                        new String[] { contact_id }, null);
                HashMap<String, String> map = new HashMap<String, String>();
                // 8.解析c


                while (c.moveToNext()) {
                    // 9.获取数据
                    String data1 = c.getString(0);
                    String mimetype = c.getString(1);
                    // 10.根据类型去判断获取的data1数据并保存
                    if (mimetype.equals("vnd.android.cursor.item/phone_v2")) {
                        // 电话
                        map.put("phone", data1);
                        Log.d("bbb",data1);
                    } else if (mimetype.equals("vnd.android.cursor.item/name")) {
                        // 姓名
                        map.put("name", data1);
                    }
                }
                // 11.添加到集合中数据
                list.add(map);
                // 12.关闭cursor
                c.close();
            }
        }
        // 12.关闭cursor
        cursor.close();



        mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL,false));

        ReAdapter2 reAdapter=new ReAdapter2(getActivity(),list);
        mRecyclerView.setAdapter(reAdapter);

        return inflate;
    }
}



public class ReAdapter2 extends RecyclerView.Adapter<ReAdapter2.Holder> {
    private Context context;
    private ArrayList<HashMap<String, String>> dybean;

    public ReAdapter2(Context context, ArrayList<HashMap<String, String>> dybean) {
        this.context = context;
        this.dybean = dybean;
    }

    @NonNull
    @Override
    public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(context).inflate(R.layout.dier_item,parent,false);
        Holder holder=new Holder(view);

        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull Holder holder, int position) {
        holder.item_xm.setText(dybean.get(position).get("name"));
        holder.item_sjhm.setText(dybean.get(position).get("phone"));


    }

    @Override
    public int getItemCount() {
        return dybean.size();
    }

    class Holder extends RecyclerView.ViewHolder {
        private TextView item_xm;
        private TextView item_sjhm;


        public Holder(View itemView) {
            super(itemView);

            item_xm=itemView.findViewById(R.id.item_xm);
            item_sjhm=itemView.findViewById(R.id.item_sjhm);

        }
    }
}


public class ks {
    private String kh;
    private String xm;
    private String jx;
    private String cj;

    public String getKh() {
        return kh;
    }

    public void setKh(String kh) {
        this.kh = kh;
    }

    public String getXm() {
        return xm;
    }

    public void setXm(String xm) {
        this.xm = xm;
    }

    public String getJx() {
        return jx;
    }

    public void setJx(String jx) {
        this.jx = jx;
    }

    public String getCj() {
        return cj;
    }

    public void setCj(String cj) {
        this.cj = cj;
    }

    @Override
    public String toString() {
        return "ks{" +
                "kh='" + kh + '\'' +
                ", xm='" + xm + '\'' +
                ", jx='" + jx + '\'' +
                ", cj='" + cj + '\'' +
                '}';
    }
}

main---assets---yy.xml




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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值