android 危险权限(需要动态请求的权限)+动态权限获取联系人

本文详细介绍了在Android应用中如何使用READ_CONTACTS权限来读取设备上的联系人信息。通过示例代码展示了如何检查权限状态,请求权限,以及如何从设备中获取并显示联系人名称和电话号码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注:该组中只要有一个被授权了,那么改组其它权限将会被全部授权

权限组名  :CALENDAR(日历访问权限) 权限名字:(1). READ_CALENDAR (2).WRITE_CALENDAR
权限组名  :CAMERA (相机访问权限)权限名字:(1).CAMERA
权限组名  :CONTACTS(联系人权限)权限名字:(1). READ_CONTACTS(2).WRITE_CONTACTS(3).GET_ACCOUNTS
权限组名  :LOCATION(位置权限)权限名字:(1). ACCESS_FINE_LOCATION(2).ACCESS_COARSE_LOCATION
权限组名  :MICROPHONE(麦克风权限)权限名字:(1). RECORD_AUDID
权限组名  :PHONE(电话权限)权限名字:(1). READ_PHONE_STATE(2).CALL_PHONE(3).READ_CALL_LOG(4).WRITE_CALL_LOG(5).ADD_VOICEMAIL(6).USE_SIP(7).PROCESS_OUTGOING_CALLS
权限组名  :SENSORS(传感器权限)权限名字:(1).BODY_SENSORS 
权限组名  :SMS(短信权限)权限名字:(1). SEND_SMS(2).RECEIVE_SMS(3).READ_SMS(4).RECEIVE_WAP_PUSH(5).RECEIVE_MMS
权限组名  :STORAGE(存储权限)权限名字:(1). READ_EXTERNAL_STORAGE(2).WRITE_EXTERNAL_STORAGE


在这里插入图片描述

<ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/list_view"></ListView>
public class MainActivity extends AppCompatActivity {
    private ArrayAdapter<String>adapter;
    private List<String>contactsList=new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView contactsView =findViewById(R.id.list_view);
        textView=findViewById(R.id.tv1);
        adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,contactsList);
        contactsView.setAdapter(adapter);
        //检查权限是否开启,清单文件也要加上权限
        	**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(displayName+"\n"+number);
                    textView.setText(displayName+"jjjjj "+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) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode)
        {
        //用户开启了权限
            case 1:
                if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED)
                {
                    readContacts();
                }
                else
                {
                //用户禁止了权限
                    Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show();
                }
                break;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值