1.先に話す
今日は、許可の前にボックスを置き、許可を動的に申請する方法を学びます。
第二に、一般的な考え方
以前は小さな本の経験があったので、今日は許可を申請する例を書いて、執筆の過程でインスピレーションを探します。
第三に、コード
パブリック クラス MainActivity が Activityを拡張してOnClickListenerを実装します { プライベートボタンbut_old = null ; プライベートボタンbut_func = null ; プライベート ImageView iv_show = null ; プライベートボタンボタン; ArrayAdapter <String> アダプタ。 リスト <String> contactList = new ArrayList <> (); プライベートListView ListView_ReadContact; @オーバーライド protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); // setContentView(R.layout.picture_tuise); but_func = (ボタン)findViewById(R.id.btn_one); but_old = (Button)findViewById(R.id.btn_two); iv_show = (ImageView)findViewById(R.id.imgShow); // but_func.setOnClickListener(this); // but_old.setOnClickListener(this); setContentView(R.layout.permission); ボタン = (ボタン)findViewById(R.id.Button); ListView_ReadContact = (ListView)findViewById(R.id.ListView_ReadContact); adapter = new ArrayAdapter <String>(this 、android.R.layout.simple_list_item_1、contactList); ListView_ReadContact.setAdapter(adapter); button.setOnClickListener(new View.OnClickListener(){ @オーバーライド public void onClick(View view){ // if(ContextCompat.checkSelfPermission(MainActivity.this、Manifest.permission.CALL_PHONE)!= // PackageManager.PERMISSION_GRANTED){ // ActivityCompat.requestPermissions(MainActivity.this、new String [] { Manifest.permission.CALL_PHONE // }、1); // } else { // call(); // } もし(ContextCompat.checkSelfPermission(MainActivity。これ、Manifest.permission.READ_CONTACTS)!= PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions(MainActivity。この、 新たな文字列[] {Manifest.permission.READ_CONTACTS}、1 ); } その他{ 連絡先は、read()は、 } } }); } public void readContact(){ カーソルcursor = null ; {を試す 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 Num = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); contactList.add(displayName + "\ n" + Num); } adapter.notifyDataSetChanged(); } } キャッチ(例外e){ e.printStackTrace(); } 最後に{ if(cursor!= null ){ cursor.close(); } } } @オーバーライド public void onRequestPermissionsResult(int requestCode、@NonNull String [] permissions、@NonNull int [] grantResults){ switch (requestCode){ case 1 : if(grantResults.length> 0 && grantResults [0] == PackageManager.PERMISSION_GRANTED){ 連絡先は、read()は、 } その他{ Toast.makeText(this、 "権限がありません" 、Toast.LENGTH_SHORT).show(); } 休憩; デフォルト: 中断; } }
第四に、効果