天天看点

获得通讯录并拨打电话 Android

由于通讯录在手机里是以数据库贮存的 所以我们可以通过getContentResolver来获得通讯录 ,这个方法返回一个游标的数据类型,通过moveToNext()方法来获取所有的手机号码信息,

当然读取手机通讯录需要权限 在AndroidManifest文件中声明即可。由于我也实现了打电话的功能 所以也要声明权限。

1.添加权限 AndroidManifest里添加

//联系人
<uses-permission android:name="android.permission.READ_CONTACTS" />
//拨打电话
<uses-permission  android:name="android.permission.CALL_PHONE" />      

2.检查是否获得了权限,如果获得了权限,然后读取联系人;否则,去申请权限,申请成功读取联系人,申请失败,弹框提示授权失败。

public class MainActivity extends AppCompatActivity {

    ArrayAdapter<String> adapter;
    List<String> contactsList = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView listView = (ListView) findViewById(R.id.contacts_view);
        adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,contactsList);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                //拨打电话
                String number = contactsList.get(i);
                Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+number));
                if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                    return;
                }
                startActivity(intent);
            }
        });

        //检查是否获得了权限
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(this,new String[] {Manifest.permission.READ_CONTACTS},1);
        } else {
            readContacts();
        }
    }

    //读取联系人
    private void readContacts() {
        Cursor cursor = null;
        try {
            //内容提供器
            cursor = getContentResolver().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 number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    contactsList.add(number);
                }
                //刷新列表
                adapter.notifyDataSetChanged();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (cursor != null){
                cursor.close();
            }
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case 1:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    readContacts();
                } else {
                    Toast.makeText(this,"获得联系***限失败",Toast.LENGTH_SHORT).show();
                }
                break;
            default:

        }
    }
}