6.0动态请求权限

xiaoxiao2021-02-28  68

普通权限(不用在用的的地方动态申请)Normal Permissions如下 ACCESS_LOCATION_EXTRA_COMMANDS ACCESS_NETWORK_STATE ACCESS_NOTIFICATION_POLICY ACCESS_WIFI_STATE BLUETOOTH BLUETOOTH_ADMIN BROADCAST_STICKY CHANGE_NETWORK_STATE CHANGE_WIFI_MULTICAST_STATE CHANGE_WIFI_STATE DISABLE_KEYGUARD EXPAND_STATUS_BAR GET_PACKAGE_SIZE INSTALL_SHORTCUT INTERNET KILL_BACKGROUND_PROCESSES MODIFY_AUDIO_SETTINGS NFC READ_SYNC_SETTINGS READ_SYNC_STATS RECEIVE_BOOT_COMPLETED REORDER_TASKS REQUEST_INSTALL_PACKAGES SET_ALARM SET_TIME_ZONE SET_WALLPAPER SET_WALLPAPER_HINTS TRANSMIT_IR UNINSTALL_SHORTCUT USE_FINGERPRINT VIBRATE WAKE_LOCK WRITE_SYNC_SETTINGS 危险权限(安卓6.0及之后需要动态请求)Dangerous Permissions: group:android.permission-group.CONTACTS   permission:android.permission.WRITE_CONTACTS   permission:android.permission.GET_ACCOUNTS   permission:android.permission.READ_CONTACTS group:android.permission-group.PHONE   permission:android.permission.READ_CALL_LOG   permission:android.permission.READ_PHONE_STATE   permission:android.permission.CALL_PHONE   permission:android.permission.WRITE_CALL_LOG   permission:android.permission.USE_SIP   permission:android.permission.PROCESS_OUTGOING_CALLS   permission:com.android.voicemail.permission.ADD_VOICEMAIL group:android.permission-group.CALENDAR   permission:android.permission.READ_CALENDAR   permission:android.permission.WRITE_CALENDAR group:android.permission-group.CAMERA   permission:android.permission.CAMERA group:android.permission-group.SENSORS   permission:android.permission.BODY_SENSORS group:android.permission-group.LOCATION   permission:android.permission.ACCESS_FINE_LOCATION   permission:android.permission.ACCESS_COARSE_LOCATION group:android.permission-group.STORAGE   permission:android.permission.READ_EXTERNAL_STORAGE   permission:android.permission.WRITE_EXTERNAL_STORAGE group:android.permission-group.MICROPHONE   permission:android.permission.RECORD_AUDIO group:android.permission-group.SMS   permission:android.permission.READ_SMS   permission:android.permission.RECEIVE_WAP_PUSH   permission:android.permission.RECEIVE_MMS   permission:android.permission.RECEIVE_SMS   permission:android.permission.SEND_SMS   permission:android.permission.READ_CELL_BROADCASTS

1、Activity中动态申请权限

//定位动态申请权限 private boolean gpsPermission() { if (ContextCompat.checkSelfPermission(MyActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { //只是拒绝 if (ActivityCompat.shouldShowRequestPermissionRationale(MyActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)) { ActivityCompat.requestPermissions(MyActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 2);// 动态请求权限 } else {//拒绝后不再询问 DialogUtils.showDialog(MyActivity.this, "权限提醒", "由于无法获取定位权限,不能正常使用此功能,请到以下路径进行设置:\n设置->应用名称->权限", "去设置", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); PermissionUtil.openSetting(MyActivity.this); } });//该功能需要获取定位权限, } return false; } return true; } //通讯录动态申请权限 private boolean directoriesPermission() { if (ContextCompat.checkSelfPermission(MyActivity.this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { //只是拒绝 if (ActivityCompat.shouldShowRequestPermissionRationale(MyActivity.this, Manifest.permission.READ_CONTACTS)) { ActivityCompat.requestPermissions(MyActivity.this, new String[]{Manifest.permission.READ_CONTACTS}, 1);// 动态请求权限 } else {//拒绝后不再询问 DialogUtils.showDialog(MyActivity.this, "权限提醒", "由于无法获取读取通讯录权限,不能正常使用此功能,请到以下路径进行设置:\n设置->应用名称->权限", "去设置", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); PermissionUtil.openSetting(MyActivity.this); } });//该功能需要读取通讯录权限, } return false; } return true; } public void onViewClicked(View view) { switch (view.getId()) { case R.id.item_points_directories: //使用 调通讯录 if (directoriesPermission()) { startActivityForResult(new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI), S_DIR); } break; default: break; }} @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { switch (requestCode) { case 1: //通讯录回调 getDirectories(data); break; default: break; } } } /** * 调取通讯录 * * @param data * @param isSend */ public void getDirectories(Intent data) { // ContentProvider展示数据类似一个单个数据库表 // ContentResolver实例带的方法可实现找到指定的ContentProvider并获取到ContentProvider的数据 ContentResolver reContentResolverol = getContentResolver(); //URI,每个ContentProvider定义一个唯一的公开的URI,用于指定到它的数据集 Uri contactData = data.getData(); //查询就是输入URI等参数,其中URI是必须的,其他是可选的,如果系统能找到URI对应的ContentProvider将返回一个Cursor对象. // Cursor cursor = managedQuery(contactData, null, null, null, null); Cursor cursor; if (Build.VERSION.SDK_INT < 11) { cursor = managedQuery(contactData, null, null, null, null); } else { CursorLoader cursorLoader = new CursorLoader(this, contactData, null, null, null, null); cursor = cursorLoader.loadInBackground(); } boolean flag = cursor.moveToFirst(); if (!flag) { showTextToast("请重新选择"); return; } //获得DATA表中的名字 String username = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); //条件为联系人ID String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); // 获得DATA表中的电话号码,条件为联系人ID,因为手机号码可能会有多个 Cursor phone = reContentResolverol.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null); while (phone.moveToNext()) { String usernumber = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)).trim(); } cursor.close(); } 2、Fragment中动态申请权限 //拍照动态申请权限 private boolean CameraPermission() { if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { //只是拒绝 if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.CAMERA)) { FirstFragment.this.requestPermissions(new String[]{Manifest.permission.CAMERA}, 4);// 动态请求权限 } else {//拒绝后不再询问 DialogUtils.showDialog(getActivity(), "权限提醒", "由于无法获取获取拍照权限,不能正常使用此功能,请到以下路径进行设置:\n设置->应用名称->权限", "去设置", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); PermissionUtil.openSetting(getActivity()); } }); } return false; } return true; } 3、打开设置界面 /** * 打开系统的该应用的设置页面 * * @param activity */ public static void openSetting(Activity activity) { Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (Build.VERSION.SDK_INT >= 9) { intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS"); intent.setData(Uri.fromParts("package", activity.getPackageName(), null)); } else if (Build.VERSION.SDK_INT <= 8) { intent.setAction(Intent.ACTION_VIEW); intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails"); intent.putExtra("com.android.settings.ApplicationPkgName", activity.getPackageName()); } activity.startActivity(intent); } /** * 打开市场的该应用的设置页面 * * @param activity */ public static void openMarkSetting(Activity activity) { Uri uri = Uri.parse("market://details?id=order.lbex"); Intent it = new Intent(Intent.ACTION_VIEW, uri); activity.startActivity(it); } /** * 打开GPS的设置页面 * * @param activity */ public static void openGpsSetting(Activity activity) { // 转到手机设置界面,用户设置GPS Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); //activity.startActivityForResult(intent, 0); // 设置完成后返回到原来的界面 activity.startActivity(intent); // 设置完成后返回到原来的界面 } /** * 打开WIFI的设置页面 * * @param activity */ public static void openWifiSetting(Activity activity) { // 转到手机设置界面,用户设置WIFI Intent it = new Intent(); ComponentName cn = new ComponentName("com.android.settings", "com.android.settings.wifi.WifiSettings"); it.setComponent(cn); activity.startActivity(it);// 设置完成后返回到原来的界面 } 注意: 在Activity中动态请求权限:ActivityCompat.requestPermissions(this, new String[{Manifest.permission.WRITE_EXTERNAL_STORAGE},1); 在Fragment中动态请求权限时不是使用AcyivityCompat而是使用Fragment本身: HomeFragment.this.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);

感谢以下博文的各位博主,谢谢各位!如有不妥的地方,请各位博主评论区留言,本人看到会立刻处理。 点击打开链接 http://blog.csdn.net/lmj623565791/article/details/50709663 点击打开链接 http://m.blog.csdn.net/KjunChen/article/details/51366845 点击打开链接 http://www.cnblogs.com/mengdd/p/4892856.html 点击打开链接 http://blog.csdn.net/aminfo/article/details/7599858 点击打开链接 http://blog.csdn.net/xiaoqiang_0719/article/details/53009323 点击打开链接 http://blog.csdn.net/u014137988/article/details/52224544

转载请注明原文地址: https://www.6miu.com/read-83457.html

最新回复(0)