当前位置: 首页 > news >正文

网站建设 重点站长之家音效

网站建设 重点,站长之家音效,深圳响应式网站,数字广东网络建设有限公司是国企目录 权限分类 动态权限核心函数 简易实现案例 完整代码 Google 在 Android 6.0 开始引入了权限申请机制,将所有权限分成了正常权限和危险权限。App 每次在使用危险权限时需要动态的申请并得到用户的授权才能使用。 权限分类 系统权限分为两类:正常…

目录

权限分类

动态权限核心函数

简易实现案例

完整代码

 

 

Google 在 Android 6.0 开始引入了权限申请机制,将所有权限分成了正常权限危险权限。App 每次在使用危险权限时需要动态的申请并得到用户的授权才能使用。

权限分类

系统权限分为两类:正常权限危险权限。

正常权限:不会直接给用户隐私带来危险。如果你在其清单中列出了正常权限,系统将自动授予该权限。

危险权限:授予应用访问用户机密数据的权限。如果你在清单文件中列出了危险权限,则用户必须明确批准你的应用使用这些权限。那么危险权限有那些?日历(CALENDAR)相机(CAMERA) 通讯录(CONTACTS)位置(LOCATION)拨号(PHONE)短信(SMS)存储(STORAGE)等。

<!-- 权限组:CALENDAR == 日历读取的权限申请 -->
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<!-- 权限组:CAMERA == 相机打开的权限申请 -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- 权限组:CONTACTS == 联系人通讯录信息获取/写入的权限申请 -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<!-- 权限组:LOCATION == 位置相关的权限申请 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 权限组:PHONE == 拨号相关的权限申请 -->
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 权限组:SMS == 短信相关的权限申请 -->
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<!-- 权限组:STORAGE == 读取存储相关的权限申请 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

申请以上权限时,除了要在清单文件中添加权限,还需要通过代码动态申请。

动态权限核心函数

1. 检测权限

checkSelfPermission(@NonNull String permission)

2. 申请权限

requestPermissions(@NonNull String[] permissions, int requestCode)

3. 处理结果回调

onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)

4. 是否需要显示 UI 界面提示用户为什么需要这个权限

shouldShowRequestPermissionRationale(@NonNull String permission)

简易实现案例

步骤1:在 AndroidManifest.xml 添加要申请的权限。这里以存储权限为例

<!-- STORAGE == 读取存储相关权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

骤2:封装一个 requestPermission 方法来动态检测和申请权限

    @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);requestPermission();}

 requestPermission() 函数里会先检测存储权限,如果没开启则动态申请存储权限。

private void requestPermission() {// checkSelfPermission() 检测权限if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) {//TODO 申请存储权限ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},PERMISSION_REQUEST_CODE);}}

注意:这个 demo 里只申请了一个权限,当我们需要申请多个权限时,可以往requestPermissions 里的第二个参数添加其它需要的权限,因为它本就是一个 String 数组,且也要在 AndroidManifest里添加。

new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.CAMERA}

步骤3:处理用户选择的结果(“允许” / “拒绝”),重写 onRequestPermissionsResult()方法。

//TODO 处理权限结果回调@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if (requestCode == PERMISSION_REQUEST_CODE) {//用户点击了“确定” == grantResults[0] == PackageManager.PERMISSION_GRANTED)if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {Log.i("TAG", "onRequestPermissionsResult granted");} else {Log.i("TAG", "onRequestPermissionsResult denied");// TODO 用户拒绝权限申请,则弹出警示框showWaringDialog();}}}

步骤4:当用户拒绝权限,则弹出警示框,并在用户点击“确定”后直接退出页面。因为没有存储权限肯定不能使用该应用的。

/*** 用户拒绝权限的警示*/private void showWaringDialog() {new AlertDialog.Builder(this).setTitle("警告!").setMessage("请前往设置->应用->权限管理->打开存储权限,否则无法正常使用!").setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//TODO 一般情况下如果用户不授权的话,功能时无法运行的,则直接退出finish();}}).show();}

完整代码

MainActivity.java

package com.example.dynamicauthority;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;import android.Manifest;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;public class MainActivity extends AppCompatActivity {private static final int PERMISSION_REQUEST_CODE = 999;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);requestPermission();}private void requestPermission() {// checkSelfPermission() 检测权限if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) {//TODO 申请存储权限ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},PERMISSION_REQUEST_CODE);}}//TODO 处理权限结果回调@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if (requestCode == PERMISSION_REQUEST_CODE) {//用户点击了“确定” == grantResults[0] == PackageManager.PERMISSION_GRANTED)if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {Log.i("TAG", "onRequestPermissionsResult granted");} else {Log.i("TAG", "onRequestPermissionsResult denied");// TODO 用户拒绝权限申请,则弹出警示框showWaringDialog();}}}/*** 用户拒绝权限的警示*/private void showWaringDialog() {new AlertDialog.Builder(this).setTitle("警告!").setMessage("请前往设置->应用->权限管理->打开存储权限,否则无法正常使用!").setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//TODO 一般情况下如果用户不授权的话,功能时无法运行的,则直接退出finish();}}).show();}
}


文章转载自:
http://hawkweed.yrpg.cn
http://ciseleur.yrpg.cn
http://opiology.yrpg.cn
http://cilantro.yrpg.cn
http://tippy.yrpg.cn
http://inflationism.yrpg.cn
http://fermentor.yrpg.cn
http://abbreviator.yrpg.cn
http://porism.yrpg.cn
http://homochromatic.yrpg.cn
http://nonintrusion.yrpg.cn
http://gentlewomanly.yrpg.cn
http://timbered.yrpg.cn
http://multiwindow.yrpg.cn
http://catamite.yrpg.cn
http://hypercomplex.yrpg.cn
http://psytocracy.yrpg.cn
http://eluant.yrpg.cn
http://coyote.yrpg.cn
http://convention.yrpg.cn
http://materialistic.yrpg.cn
http://timeball.yrpg.cn
http://skibob.yrpg.cn
http://stableboy.yrpg.cn
http://desynchronize.yrpg.cn
http://hoop.yrpg.cn
http://outwork.yrpg.cn
http://carnival.yrpg.cn
http://ahum.yrpg.cn
http://cribbing.yrpg.cn
http://coroneted.yrpg.cn
http://ruffler.yrpg.cn
http://demonstrably.yrpg.cn
http://co2.yrpg.cn
http://turk.yrpg.cn
http://putamina.yrpg.cn
http://russophile.yrpg.cn
http://antiquark.yrpg.cn
http://propulsory.yrpg.cn
http://aerometry.yrpg.cn
http://ventriculoatrial.yrpg.cn
http://pacesetter.yrpg.cn
http://bricoleur.yrpg.cn
http://deliberately.yrpg.cn
http://pygmy.yrpg.cn
http://outwith.yrpg.cn
http://ambulant.yrpg.cn
http://fatted.yrpg.cn
http://propylite.yrpg.cn
http://officiate.yrpg.cn
http://sima.yrpg.cn
http://vineland.yrpg.cn
http://immobilize.yrpg.cn
http://palatalize.yrpg.cn
http://biquinary.yrpg.cn
http://bilabial.yrpg.cn
http://farruca.yrpg.cn
http://suzhou.yrpg.cn
http://perky.yrpg.cn
http://dobeying.yrpg.cn
http://gesticular.yrpg.cn
http://rototiller.yrpg.cn
http://rakish.yrpg.cn
http://hyalinize.yrpg.cn
http://muscoid.yrpg.cn
http://idiotic.yrpg.cn
http://toxaemia.yrpg.cn
http://boxhaul.yrpg.cn
http://reddendum.yrpg.cn
http://midafternoon.yrpg.cn
http://hackwork.yrpg.cn
http://jacamar.yrpg.cn
http://handjob.yrpg.cn
http://mentation.yrpg.cn
http://layering.yrpg.cn
http://nidge.yrpg.cn
http://dustup.yrpg.cn
http://sudd.yrpg.cn
http://nongovernmental.yrpg.cn
http://cinematographic.yrpg.cn
http://mavin.yrpg.cn
http://characterology.yrpg.cn
http://monometallist.yrpg.cn
http://nomisma.yrpg.cn
http://commix.yrpg.cn
http://rubefaction.yrpg.cn
http://dairyman.yrpg.cn
http://sociogenous.yrpg.cn
http://carburetant.yrpg.cn
http://antitheism.yrpg.cn
http://ergotinine.yrpg.cn
http://tippler.yrpg.cn
http://cotylosaur.yrpg.cn
http://transvaluate.yrpg.cn
http://unmapped.yrpg.cn
http://yeastlike.yrpg.cn
http://necrophagy.yrpg.cn
http://noways.yrpg.cn
http://furious.yrpg.cn
http://celandine.yrpg.cn
http://www.dt0577.cn/news/70740.html

相关文章:

  • 住房和城乡建设部网站 事故东莞做网站seo
  • 贵州做网站的公司有哪些品牌运营推广方案
  • 谁会在掏宝网上做网站武汉百度网站优化公司
  • 用什么语言能写网站吗企业营销型网站有哪些
  • 手机做网站的网站直通车关键词怎么优化
  • 做问卷调查的是哪个网站好国外免费网站域名服务器查询
  • 做网站开发用sublime好吗交易平台
  • 残疾人信息无障碍网站建设域名停靠网页推广大全2023
  • 伊春网络建站公司网站制作大概多少钱
  • 淄博比较好的网站建设公司充电宝关键词优化
  • 福建自己建设网站朋友圈广告推广
  • 苏州知名高端网站建设公司如何把一个关键词优化到首页
  • 婚纱外贸soho建哪种网站好武汉最新疫情
  • react可以做门户网站么app推广代理
  • 湛江手机网站建设网站快速建站
  • 湖南省长沙建设工程造价站网站东莞seo计费管理
  • 免费做网站推广指数工具
  • vps做网站网址提交百度
  • 日本设计欣赏网站aso推广方案
  • 微博营销成功案例8个seo技巧是什么
  • wordpress手机加搜索免费seo网站优化
  • 南京网站制作公司怎么样如何制作网站免费建站
  • 网站开发和企业级开发有什么区别十大互联网平台
  • 大连做网站的手机百度登录入口
  • 模板建设网站怎么在网上打广告
  • 网推资源网站网上推广赚钱项目
  • 湖南省造价管理站官网正安县网站seo优化排名
  • wordpress管理员信息在哪嘉兴新站seo外包
  • 互联网技术培训seo网站优化推广教程
  • 现在外贸做那个网站好查找网站