Android手動(dòng)檢查并申請(qǐng)權(quán)限方法
Android權(quán)限一般是在AndroidManifest.xml中聲明,在安裝或首次使用的時(shí)候系統(tǒng)會(huì)自動(dòng)提示用戶(hù)是否提供權(quán)限
Android官方文檔:
Then, when the application is installed on the device, the installer determines whether or not to grant the requested permission by checking the authorities that signed the application's certificates and, in some cases, asking the user. If the permission is granted, the application is able to use the protected features. If not, its attempts to access those features will simply fail without any notification to the user.
但有時(shí)候因?yàn)槭謾C(jī)設(shè)備等原因,并沒(méi)有在一開(kāi)始就彈出提示框讓用戶(hù)確認(rèn)是否提供權(quán)限,對(duì)于有些權(quán)限,不確認(rèn)的話(huà)就不提供權(quán)限,因此,有些功能就無(wú)法實(shí)現(xiàn)。
這時(shí)候需要我們手動(dòng)檢查是否已經(jīng)擁有權(quán)限,沒(méi)有的話(huà)就調(diào)用代碼提示用戶(hù)提供權(quán)限。
如何手動(dòng)檢查并申請(qǐng)權(quán)限
如:在寫(xiě)入之前檢查是否有WRITE_EXTERNAL_STORAGE權(quán)限,沒(méi)有則申請(qǐng)權(quán)限
代碼:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { //申請(qǐng)WRITE_EXTERNAL_STORAGE權(quán)限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_EXTERNAL_STORAGE_REQUEST_CODE); }
請(qǐng)求權(quán)限后,系統(tǒng)會(huì)彈出請(qǐng)求權(quán)限的Dialog,允許即可
用戶(hù)選擇允許或拒絕后,會(huì)回調(diào)onRequestPermissionsResult方法, 該方法類(lèi)似于onActivityResult
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); doNext(requestCode,grantResults); }
PS:
在Android6.0,有些權(quán)限只需要在AndroidManifest.xml文件中聲明即可,但有些除了聲明以外,還需要在運(yùn)行時(shí)判斷,即用戶(hù)確認(rèn),需要確認(rèn)的權(quán)限如下:
身體傳感器 日歷 攝像頭 通訊錄 地理位置 麥克風(fēng) 電話(huà) 短信 存儲(chǔ)空間
Android6.0系統(tǒng)默認(rèn)為targetSdkVersion小于23的應(yīng)用默認(rèn)授予了所申請(qǐng)的所有權(quán)限,
所以如果你以前的APP設(shè)置的targetSdkVersion低于23,在運(yùn)行時(shí)也不會(huì)崩潰,
但這也只是一個(gè)臨時(shí)的救急策略,用戶(hù)還是可以在設(shè)置中取消授予的權(quán)限。
以下權(quán)限只需要在AndroidManifest.xml中聲明即可使用:
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS android.permission.ACCESS_NETWORK_STATE android.permission.ACCESS_NOTIFICATION_POLICY android.permission.ACCESS_WIFI_STATE android.permission.ACCESS_WIMAX_STATE android.permission.BLUETOOTH android.permission.BLUETOOTH_ADMIN android.permission.BROADCAST_STICKY android.permission.CHANGE_NETWORK_STATE android.permission.CHANGE_WIFI_MULTICAST_STATE android.permission.CHANGE_WIFI_STATE android.permission.CHANGE_WIMAX_STATE android.permission.DISABLE_KEYGUARD android.permission.EXPAND_STATUS_BAR android.permission.FLASHLIGHT android.permission.GET_ACCOUNTS android.permission.GET_PACKAGE_SIZE android.permission.INTERNET android.permission.KILL_BACKGROUND_PROCESSES android.permission.MODIFY_AUDIO_SETTINGS android.permission.NFC android.permission.READ_SYNC_SETTINGS android.permission.READ_SYNC_STATS android.permission.RECEIVE_BOOT_COMPLETED android.permission.REORDER_TASKS android.permission.REQUEST_INSTALL_PACKAGES android.permission.SET_TIME_ZONE android.permission.SET_WALLPAPER android.permission.SET_WALLPAPER_HINTS android.permission.SUBSCRIBED_FEEDS_READ android.permission.TRANSMIT_IR android.permission.USE_FINGERPRINT android.permission.VIBRATE android.permission.WAKE_LOCK android.permission.WRITE_SYNC_SETTINGS com.android.alarm.permission.SET_ALARM com.android.launcher.permission.INSTALL_SHORTCUT com.android.launcher.permission.UNINSTALL_SHORTCUT
以上這篇Android手動(dòng)檢查并申請(qǐng)權(quán)限方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Android超清晰6.0權(quán)限申請(qǐng)AndPermission
- android 6.0 寫(xiě)入SD卡的權(quán)限申請(qǐng)實(shí)例講解
- Android 6.0 藍(lán)牙搜索不到設(shè)備原因,MIUI權(quán)限申請(qǐng)機(jī)制方法
- android6.0權(quán)限動(dòng)態(tài)申請(qǐng)框架permissiondispatcher的方法
- Android 在程序運(yùn)行時(shí)申請(qǐng)權(quán)限的實(shí)例講解
- React-Native之Android(6.0及以上)權(quán)限申請(qǐng)?jiān)斀?/a>
- Android 6.0動(dòng)態(tài)權(quán)限申請(qǐng)教程
- Android 如何實(shí)現(xiàn)動(dòng)態(tài)申請(qǐng)權(quán)限
相關(guān)文章
android?studio實(shí)現(xiàn)簡(jiǎn)易的計(jì)算器
這篇文章主要為大家詳細(xì)介紹了android?studio實(shí)現(xiàn)簡(jiǎn)易的計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05Android registerForActivityResult動(dòng)態(tài)申請(qǐng)權(quán)限案例詳解
這篇文章主要介紹了Android registerForActivityResult動(dòng)態(tài)申請(qǐng)權(quán)限案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09Android使用Matrix旋轉(zhuǎn)圖片模擬碟片加載過(guò)程
這篇文章主要為大家詳細(xì)介紹了Android使用Matrix旋轉(zhuǎn)圖片模擬碟片加載過(guò)程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03android TextView屬性的詳細(xì)介紹 分享
android TextView屬性的詳細(xì)介紹 分享,需要的朋友可以參考一下2013-05-05Android中Java根據(jù)文件頭獲取文件類(lèi)型的方法
這篇文章主要介紹了Android中Java根據(jù)文件頭獲取文件類(lèi)型的方法,涉及Android針對(duì)文件屬性的相關(guān)操作技巧,需要的朋友可以參考下2016-08-08RecyclerView實(shí)現(xiàn)插入和刪除
這篇文章主要為大家詳細(xì)介紹了RecyclerView實(shí)現(xiàn)插入和刪除,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08關(guān)于如何使用Flutter開(kāi)發(fā)執(zhí)行操作系統(tǒng)shell命令的工具詳解
本文主要介紹如何在Flutter應(yīng)用中開(kāi)發(fā)一個(gè)Android終端命令行工具,包括終端命令行頁(yè)面的布局設(shè)計(jì)、與Shell通信的基本原理、輸入輸出處理的基本技巧等,以及如何在具體應(yīng)用中利用終端命令行工具來(lái)執(zhí)行系統(tǒng)命令和與用戶(hù)進(jìn)行交互2023-06-06Android基于Flutter編寫(xiě)文件下載管理器
文件下載在很多類(lèi)型的應(yīng)用中會(huì)涉及,例如音樂(lè)、文檔、包括圖片(只是圖片可以使用一些組件完成無(wú)感知的下載)。本篇介紹使用Flutter中的Dio下載方法完成文件的下載,需要的可以參考一下2022-03-03Android開(kāi)發(fā)數(shù)據(jù)結(jié)構(gòu)算法ArrayList源碼詳解
這篇文章主要為大家介紹了Android開(kāi)發(fā)數(shù)據(jù)結(jié)構(gòu)算法ArrayList源碼詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10