1. 程式人生 > >關於Runtime Permissions的學習以及使用的一些注意事項

關於Runtime Permissions的學習以及使用的一些注意事項

當我們開發軟體涉及到照相、獲取方強方向、或者打電話這些操作時都設計到大量的敏感的使用者資訊比如:聯絡人、日曆安排、當前的位置,這些敏感的資訊是由permissions保護的,app要獲得這些資料必須要有對應的permissions。Android 6.0 Marshmallow 介紹了一種在API 23和執行在Android 6.0+裝置上新的permissions模型:runtime permissions,來代替現有的安裝時permissions。

Runtime permissions可以讓app控制什麼時候和什麼context來申請許可權,這樣使用者就不用在安裝app的時候選擇接受一大列的許可權,安裝app之後直接進入app,app進行升級的時候也不會要求。

在很多時候,可以使用系統已經存在的intents系統來呼叫系統已經存在的特定apps,而不是在app中重新開發一個類似的全部功能,比如,利用ACTION_IMAGE_CAPTURE 來start一個使用者更加熟悉的系統的照相app而不是自己建立一個新的照相模組。

如果確實需要使用runtime permission,可以使用如下的方法:
可以使用 ContextCompat.checkSelfPermission() 來檢測app是否已經獲得許可權,這個方法只有在API 23上可以使用,如果沒有許可權則可以使用requestPermissions()來獲取許可權,會呼叫系統許可權控制的對話方塊來供使用者授予相應的許可權,需要注意的是,使用者可以通過系統設定來隨時取消對應的許可權,所以應該每次呼叫需要獲取許可權的模組時,都要檢測許可權。

下面的程式碼檢測app是否有許可權讀取使用者的聯絡人,如果沒有則獲取許可權:

if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (shouldShowRequestPermissionRationale(
            Manifest.permission.READ_CONTACTS)) {
        // Explain to the user why we need to read the contacts
} requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, MY_PERMISSIONS_REQUEST_READ_CONTACTS); // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an // app-defined int constant return; }

在呼叫 requestPermissions()方法時,系統就會彈出標準的許可權對話方塊,我們是無法修改的,如果需要提供解釋說明為什麼需要獲得這些許可權,必須在呼叫 requestPermissions()方法之前進行。

當用戶在許可權的對話方塊做出選擇後,系統就會呼叫onRequestPermissionsResult(int, String[], int[])(這個方法需要重寫)把選擇結果傳到這個函式,比如在獲取READ_CONTACTS許可權時,可以利用如下程式碼:

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // permission was granted, yay! do the
                // calendar task you need to do.

            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            return;
        }

        // other 'switch' lines to check for other
        // permissions this app might request
    }
}

相關推薦

mybatis中mapper的用法以及一些注意事項

        這幾天在公司做專案,到了收尾的階段,但是發現自己在使用mybatis的時候給自己留下了很多的坑,於是乎花了兩天的時間來除錯和重新構思自己寫下的mapper.xml檔案,總算是有些收穫,

cloudera manager 5.7 安裝配置以及一些注意事項

groupadd mysqluseradd -M -g mysql -s /sbin/nologin -d /usr/local/mysql  mysqltar xf /opt/mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz  -C /us

Linux上安裝Zookeeper以及一些注意事項

最近打算出一個系列,介紹Dubbo的使用。 分散式應用現在已經越來越廣泛,Spring Could也是一個不錯的一站式解決方案,不過據我瞭解國內目前貌似使用阿里Dubbo的公司比較多,一方面這個框架也確實很OK,另一方面可能也是因為Dubbo的中文文件比較

linux系統的安裝以及一些注意事項

最近看gradle時發現作者說用ubantu比較好,由於以前一直在使用windows和mac所以對linux系統一直不懂。前幾天湊五一假期把linux系統安裝了一下,由於以前電腦上安裝的是windows,所以一開始找了好多安裝雙系統的文件,看了好多,但是就是easyBCD下載

關於Runtime Permissions學習以及使用的一些注意事項

當我們開發軟體涉及到照相、獲取方強方向、或者打電話這些操作時都設計到大量的敏感的使用者資訊比如:聯絡人、日曆安排、當前的位置,這些敏感的資訊是由permissions保護的,app要獲得這些資料必須要有對應的permissions。Android 6.0 Mar

學習shell指令碼時發現的一些注意事項

1.算術運算子一定要緊挨運算元; 2.賦值操作時,let 後面的整個要用引號包起來; 3.shift可以實現引數位置變數下移一位,具體就是$1=$2 ,$2=$3...  $#遞減 ; 4.$*作為for迴圈列表時,加引號,即 “[email protected]”只迴圈一次並一次性

Docker學習系列(三):Ubuntu下使用Docker的基本指令記錄及一些注意事項

1.Dockerhub下載映象 有兩種方式可以獲得新的映象 直接從dockerhub下載編譯好的image(該編譯過程在docker hub的雲端完成)(見3.1) 下載docekrfile檔案,在本機進行build 直接在docker

關於使用GHOST進行磁碟對拷整盤映象以及映象恢復的一些注意事項

這裡把大家在使用GHOST對磁碟進行對拷或做映象以及從映象恢復時操作過程中的一些注意事項提一下,當個參考。有不對的地方歡迎大家指正^_^ 從網上找了個圖,看得詳細一些: 首先先把操作順序化簡為數字方式。比如 : LOCAL-DISK-TO DISK ,這裡代表111

Git命令以及常見注意事項

命令: git init -> 初始化一個git倉庫git clone -> 克隆一個本地庫git pull -> 拉取伺服器最新程式碼git fetch –p -> 強行拉取遠端程式碼覆蓋本地(同步遠端,不止是程式碼)git add -> 新增到git倉庫git commit

Android中用命令列檢視內嵌資料庫SQLite3的一些注意事項

進入手機模擬器的shell環境    連線好手機模擬器後,通過Android Studio的Teminal終端直接進入shell環境          adb shell //進入手機模擬器的shell環境 s

關於浮動的一些注意事項

關於浮動:   巨集觀地講,我們的web頁面和photoshop等設計軟體有本質的區別:web頁面的製作,是個“流”,必須從上而下,像“織毛衣”。而設計軟體,想往哪裡畫個東西,都能畫。   行內元素和塊級元素的區別:(非常重要) 行內元素: 與其他行內元素並排; 不能設定寬、高。預設的寬度,

搜尋引擎優化的一些注意事項

4、 評價網站實用性有哪些原則  網站速度 搜尋結果中的點選率 使用者停留時間、訪問時長 使用者跳出率 回頭客的數量 註冊使用者和非註冊使用者的比例 使用者訪問來源分佈 5、什麼是pr值 PR即PageRank,也就是網頁級別

darknet訓練yolov3時的一些注意事項

  訓練需要用到的檔案: 1)       .data檔案。該檔案包含一些配置資訊,具體為訓練的總類別數,訓練資料和驗證資料的路徑,類別名稱,模型存放路徑等。 例如coco.data classes= 80 # 訓練總類別數

async和await對promise非同步方案的改進,以及使用注意事項

async、await相比原生promise的有優勢: 1.更加簡潔,await一個promise即可,那麼會自動返回這個promise的resolve值,無需在then函式的回撥中手動取值,徹底解決了回撥 //Promise方式 function f() { let promise = new

char陣列和char指標的使用區別和一些注意事項

const用法 const char* p;表示p是一個指向常量字元的指標 char* const p;表示p是一個指向字元的常量指標,p是不允許改變的 另外要注意的是 const char* p等價於 char const *p 也就是說const描述char和*p是等價的

c語言標頭檔案以及make注意事項

c語言標頭檔案以及make注意事項 標頭檔案說明:自己定義的標頭檔案和專案檔案放在一起,注意使用""而不是使用<>,系統的標頭檔案才使用<> 當main函式要呼叫其他函式的時候在編譯的時候需要將其他的c檔案也一起編譯 gcc main.c test.c   make

關於Visual Studio 2013 配置OpenCV 的一些注意事項和執行問題

1.在visual studio上配置opencv的依賴項和執行庫. 1.開啟Vs,檔案->新建->專案 2. visual c++ -> Win32控制檯應用程式->確定 (劃線的內容可以根據自己習慣更改) 3.直接下一步 4.選中空專案這個選項,然

hibernate中session的獲取使用以及其他注意事項

hibernate中session的獲取使用以及其他注意事項 前言:工作時,在同時使用Hibernate的getSession()、getHibernateTemplate()獲取Session後進行資料查詢時不是出現了"session is close"異常就是出現其他異常問題,痛定思痛,決定收集並整理相

啟用SAP Fiori之前的一些注意事項

Prerequisites Checklist Before you can install and configure SAP Fiori apps, you must ensure that the prerequisite software is installed and R

有關索引建立的一些注意事項

在建立索引以後,頻繁的對資料庫表進行delete 、update、insert 操作,那麼索引的效率會變慢,比如一天內表資料增加百萬條,並且是在含有索引的情況下,處理這種問題就要考慮索引建立與否,以及索引的管理 索引建立的型別,一般會建B-tree索引 可以在資料量少的情況下不建