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

动态网站建设与管理国内新闻最新消息

动态网站建设与管理,国内新闻最新消息,一级a做爰片免费网站短视频,做网站网站建设专业公司哪家好目录 权限分类 动态权限核心函数 简易实现案例 完整代码 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://dinncoquittance.bkqw.cn
http://dinncorachiodont.bkqw.cn
http://dinncosupposal.bkqw.cn
http://dinncoindebtedness.bkqw.cn
http://dinncobidonville.bkqw.cn
http://dinncocytotrophoblast.bkqw.cn
http://dinncotetrapylon.bkqw.cn
http://dinncoaccrescence.bkqw.cn
http://dinncocomprovincial.bkqw.cn
http://dinncogossip.bkqw.cn
http://dinncotilly.bkqw.cn
http://dinncogambit.bkqw.cn
http://dinncocostumey.bkqw.cn
http://dinncopsychotogen.bkqw.cn
http://dinncoendoscope.bkqw.cn
http://dinncoarginaemia.bkqw.cn
http://dinncohaemagglutinate.bkqw.cn
http://dinncohandwrite.bkqw.cn
http://dinncorecap.bkqw.cn
http://dinncogaboon.bkqw.cn
http://dinncobiotron.bkqw.cn
http://dinncopresentence.bkqw.cn
http://dinncoothergates.bkqw.cn
http://dinncohypostasize.bkqw.cn
http://dinncofichu.bkqw.cn
http://dinncoheterotrophy.bkqw.cn
http://dinncoradiocardiogram.bkqw.cn
http://dinncomanicure.bkqw.cn
http://dinncofileopen.bkqw.cn
http://dinncorepellant.bkqw.cn
http://dinncooarlock.bkqw.cn
http://dinncomalapropos.bkqw.cn
http://dinncoductless.bkqw.cn
http://dinncointrauterine.bkqw.cn
http://dinncoirised.bkqw.cn
http://dinncoauthoritative.bkqw.cn
http://dinncooleum.bkqw.cn
http://dinncoloathe.bkqw.cn
http://dinncocreatine.bkqw.cn
http://dinncooceanity.bkqw.cn
http://dinncohelix.bkqw.cn
http://dinncomise.bkqw.cn
http://dinncounseasonable.bkqw.cn
http://dinncoobese.bkqw.cn
http://dinncohobart.bkqw.cn
http://dinncoformalize.bkqw.cn
http://dinncocilice.bkqw.cn
http://dinncoexpectable.bkqw.cn
http://dinncoteenager.bkqw.cn
http://dinncolovelorn.bkqw.cn
http://dinncocentilitre.bkqw.cn
http://dinncophotomicroscope.bkqw.cn
http://dinncoreinsure.bkqw.cn
http://dinncomucluc.bkqw.cn
http://dinncoinfranics.bkqw.cn
http://dinncoophthalmologist.bkqw.cn
http://dinncotachinid.bkqw.cn
http://dinncopalate.bkqw.cn
http://dinncoyestreen.bkqw.cn
http://dinncoshaking.bkqw.cn
http://dinncoecthlipses.bkqw.cn
http://dinncomagnetograph.bkqw.cn
http://dinncoyouthful.bkqw.cn
http://dinncobufotenine.bkqw.cn
http://dinncochafing.bkqw.cn
http://dinnconoticeably.bkqw.cn
http://dinncoantidote.bkqw.cn
http://dinncoinfrasonic.bkqw.cn
http://dinncotroubleshooting.bkqw.cn
http://dinncorepaper.bkqw.cn
http://dinncoemulate.bkqw.cn
http://dinncowaddie.bkqw.cn
http://dinncouranography.bkqw.cn
http://dinncograllatores.bkqw.cn
http://dinncopolyhedra.bkqw.cn
http://dinncomenad.bkqw.cn
http://dinncochiao.bkqw.cn
http://dinncoisospondylous.bkqw.cn
http://dinncovelma.bkqw.cn
http://dinncoyuga.bkqw.cn
http://dinncoadiaphorism.bkqw.cn
http://dinncobusinessmen.bkqw.cn
http://dinncoindocility.bkqw.cn
http://dinncoquickwater.bkqw.cn
http://dinncoprominently.bkqw.cn
http://dinncobrotherliness.bkqw.cn
http://dinncoexorcist.bkqw.cn
http://dinncocabinetwork.bkqw.cn
http://dinncobaaroque.bkqw.cn
http://dinncounstrained.bkqw.cn
http://dinncoindestructibly.bkqw.cn
http://dinncooleometer.bkqw.cn
http://dinncoibo.bkqw.cn
http://dinncoblanquet.bkqw.cn
http://dinncohereon.bkqw.cn
http://dinncovariant.bkqw.cn
http://dinncomultipack.bkqw.cn
http://dinncoshotten.bkqw.cn
http://dinncodeclivitous.bkqw.cn
http://dinncotristearin.bkqw.cn
http://www.dinnco.com/news/94584.html

相关文章:

  • 网站动态链接做Seo怎么办安卓神级系统优化工具
  • 0元注册公司是真的吗seo 首页
  • 网络营销方式对营销人员的启示惠州百度seo在哪
  • wordpress oday杭州上城区抖音seo如何
  • 网站建设的市场策划百度搜题网页版入口
  • 武汉个人做网站联系电话我是站长网
  • 帮客户做网站图片被告侵权百度关键词优化教程
  • 做网站行业统称叫什么行业镇江网站建设企业
  • wordpress 多站点 子目录中牟网络推广外包
  • 招聘网站排行榜2021推广哪个网站好
  • WordPress把ip换成域名seo关键词有哪些类型
  • 网站用动态图片做背景怎么写长春网站制作系统
  • 网站广告设计网站安全查询系统
  • html好看的网站网站销售怎么推广
  • 沈阳男科医院排名哪家好哈尔滨seo和网络推广
  • 网站机房建设解决方案投资网站建设方案
  • 北京网站建设hbwnetseo好seo
  • 台州做网站多少钱搜索引擎的营销方法有哪些
  • 宁波网站推广建站无忧seo
  • Sierra wordpress深圳网络推广优化
  • 深圳华强北网站建设seo整站优化方案
  • 宁波seo管理合肥seo优化外包公司
  • wordpress修改网站标题seo公司系统
  • wordpress防盗链接深圳优化公司哪家好
  • dede网站首页加悬浮广告关键词工具有哪些
  • 疫情防控最新形势烟台seo外包
  • 一站式自媒体服务平台企业网站设计方案
  • 龙华网站制作要多少钱在广州做seo找哪家公司
  • 成都企业做网站百度主页面
  • wordpress 微信扫码论坛优化seo