日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android中的权限请求

發布時間:2023/12/14 Android 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android中的权限请求 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • Android中的權限請求
    • Android中權限分類
    • Android中的動態權限
      • 概述
      • 分類
      • 請求方法
        • 官方提供的API
          • 步驟
          • 代碼
        • RxPermissions框架
          • 引入依賴庫
          • 聲明權限
          • 申請單個權限
          • 申請多個權限
        • AndPermission
          • 引入依賴庫
          • 語法
          • 申請權限(單個或多個)
    • 總結

不積跬步,無以至千里;不積小流,無以成江海。要沉下心來,詩和遠方的路費真的很貴!

參考博客:小胡老師的博客

Android中的權限請求

在Android 6.0以后,Android中添加了動態請求權限。

Android中權限分類

  • 普通權限

一般為那種請求數據和資源的權限,比如網絡請求權限。一般不告知用戶,用戶也不能撤銷這類權限。在Manifest中申請。

  • 危險權限

一般設計到用戶隱私的權限,即為危險權限,需要動態請求。

  • 特殊權限

一般對于系統的彈窗之類的權限。

Android中的動態權限

概述

在Android 6.0以后,申請危險權限,不僅要在Manifest中聲明,還要調用官方提供的API主動申請。

分類

總共分為9組,每一組中的一個權限申請成功,那么整組的權限都可以使用。

  • 訪問通訊錄——android.permission-group.CONTACTS
  • 電話——android.permission-group.PHONE
  • 日歷信息——android.permission-group.CALENDAR
  • 相機權限——android.permission-group.CAMERA
  • 傳感器——android.permission-group.SENSORS
  • 地理位置——android.permission-group.LOCATION
  • 存儲卡——android.permission-group.STORAGE
  • 多媒體——android.permission-group.MICROPHONE
  • SMS——android.permission-group.SMS
  • 請求方法

    官方提供的API

    步驟
  • 在Manifest文件中聲明需要申請的權限
  • 判斷當前的版本是否符合(大于等于Android 6.0)
  • 判斷權限是否已經被授權
  • 已授權,不再操作權限
  • 未授權,進行權限申請
  • 用戶操作后,提示權限是否開啟成功
  • 代碼
    • 聲明權限

    如果對于這類危險權限的申請,沒有在Manifest中聲明,那么就會默認不授權,并不會彈窗給用戶選擇。

    <!-- 在外部存儲設備中寫入和修改數據 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    • 邏輯代碼
    public class MainActivity extends AppCompatActivity {private static final int REQUEST_CODE = 1;private static String[] PERMISSIONS_STORAGE = {"android.permission.READ_EXTERNAL_STORAGE","android.permission.WRITE_EXTERNAL_STORAGE"};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//android版本在6.0以上if (Build.VERSION.SDK_INT >= 23) {System.out.println("版本正確");checkPermission();}else {System.out.println("版本過低");}}private void checkPermission() {//權限是否已經賦予if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) {//未賦予權限,申請權限if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {//選擇不開啟權限的時候,提示用戶Toast.makeText(this, "請開通相關權限,否則無法正常使用本應用!", Toast.LENGTH_SHORT).show();}//申請權限ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE, REQUEST_CODE);} else {//權限已賦予Toast.makeText(this, "已授權成功!", Toast.LENGTH_SHORT).show();}}@Overridepublic void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {switch (requestCode) {//權限的申請結果返回case REQUEST_CODE: {if (grantResults.length > 0&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {//已授權Toast.makeText(this, "授權成功!", Toast.LENGTH_SHORT).show();} else {//未授權Toast.makeText(this, "授權被拒絕!", Toast.LENGTH_SHORT).show();}}}} }

    RxPermissions框架

    RxPermissions 可以簡化獲取權限的操作,而且內部也自動幫我們判斷了版本是否需要申請權限。同時結合RxJava回調結果。

    使用RxPermissions框架的最小SDK版本要大于等于14。

    引入依賴庫
    allprojects {repositories {...maven { url 'https://jitpack.io' }} }dependencies {implementation 'com.github.tbruyelle:rxpermissions:0.10.2'implementation 'io.reactivex.rxjava2:rxjava:2.0.1'implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' }
    聲明權限

    危險權限的申請需要在Manifest文件中聲明。

    <!--相機--> <uses-permission android:name="android.permission.CAMERA" />
    申請單個權限
    //初始化RxPermissions框架RxPermissions permissions = new RxPermissions(this);//申請權限permissions.request(Manifest.permission.CAMERA).subscribe(new Consumer<Boolean>() {//RxJava的觀察者模式@Overridepublic void accept(Boolean aBoolean) {if (aBoolean ) {//接受Toast.makeText(MainActivity.this, "授權成功!", Toast.LENGTH_SHORT).show();}else {//拒絕Toast.makeText(MainActivity.this, "授權失敗!", Toast.LENGTH_SHORT).show();}}});
    申請多個權限
    • 和申請單個權限沒區別,增加一下權限的種類即可。
    //初始化RxPermissions框架RxPermissions permissions = new RxPermissions(this);//申請權限permissions.request(Manifest.permission.CAMERA,Manifest.permission.WRITE_CALL_LOG).subscribe(new Consumer<Boolean>() {//RxJava的觀察者模式@Overridepublic void accept(Boolean aBoolean) {if (aBoolean ) {//接受Toast.makeText(MainActivity.this, "授權成功!", Toast.LENGTH_SHORT).show();}else {//拒絕Toast.makeText(MainActivity.this, "授權失敗!", Toast.LENGTH_SHORT).show();}}});

    AndPermission

    引入依賴庫
    implementation 'com.yanzhenjie:permission:2.0.3'
    語法

    申請權限(單個或多個)
    //直接使用框架AndPermission.with(this).runtime().permission(Permission.WRITE_EXTERNAL_STORAGE,Permission.CAMERA)//接受.onGranted(permissions -> {Toast.makeText(MainActivity.this, "授權成功!", Toast.LENGTH_SHORT).show();})//拒絕.onDenied(permissions -> {Toast.makeText(MainActivity.this, "授權失敗!", Toast.LENGTH_SHORT).show();})//啟動方法.start();

    總結

  • Android 6.0之前,所有權限在Manifest文件中聲明賦予,用戶無權操作;Android 6.0之后,用戶可以選擇是否授予權限。
  • 對于普通權限,無論版本,都在Manifest文件中聲明即可使用。
  • 對于危險權限,Android 6.0之后,需要用戶同意賦予,才可使用,保護用戶隱私。
  • 危險權限在申請之前,一定要在Manifest文件中聲明,否則會出現錯誤或者出現無法授權的情況。
  • 總結

    以上是生活随笔為你收集整理的Android中的权限请求的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。