Android studio 获取手机联系人和号码并输出

初学Android studio 需要做一个功能,获取联系人信息、并将联系人的名字,号码输出到显示屏上。

使用Android studio版本:3.2  JDK版本: jdk1.8.0_151  

首先在清单文件添加权限,获取联系人读写权限

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

然后是编写布局文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
    tools:context=".MainActivity">

   <ListView
       android:id="@+id/list_view"
       android:layout_width="match_parent"
       android:layout_height="match_parent">

   </ListView>

</android.support.constraint.ConstraintLayout>

JAVA代码

/**
 * @author SmallLetters
 */
public class MainActivity extends AppCompatActivity {

    private             ListView             mlist_view;
    private             ArrayAdapter<String> mAdapter;
    private             List<String>         mContatcList     = new ArrayList<>();
    public static final int                  REQ_CODE_CONTACT = 1;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
        initAdapter();
        checkContactPermission();

    }

    /**
     * 检查申请联系人权限
     */
    private void checkContactPermission() {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS)
                != PackageManager.PERMISSION_GRANTED) {
            //未获取到读取联系人权限

            //向系统申请权限
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.READ_CONTACTS}, REQ_CODE_CONTACT);
        } else {
            query();
        }
    }

    private void query() {
        ContentResolver contentResolver = this.getContentResolver();
        Cursor cursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                null, null, null, null);
        Log.d("SmallLetters", ContactsContract.CommonDataKinds.Phone.CONTENT_URI.toString());
        if (cursor != null) {
            while (cursor.moveToNext()) {
                String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                mContatcList.add("name" + name + "number" + number);
            }
            //更新数据
            mAdapter.notifyDataSetChanged();
            cursor.close();

        }
    }


    private void initAdapter() {
        mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mContatcList);
        
        mlist_view.setAdapter(mAdapter);
    }

    private void initView() {
        //获取list控件
        mlist_view = findViewById(R.id.list_view);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        //判断用户是否,同意 获取联系人授权
        if (requestCode == REQ_CODE_CONTACT && grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            //获取到读取联系人权限
            query();
        } else {
            Toast.makeText(this, "未获取到联系人权限", Toast.LENGTH_SHORT).show();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42179105/article/details/82901274