動態新增許可權
請求單一許可權
為了請求單一許可權,我們可以使用checkSelfPermission()方法來檢查應用是否已經授予了該許可權。如下面程式碼所示,如果我們沒有授予該許可權,那麼就需要使用requestPermissions()方法來請求,將要申請的許可權以陣列型別作為引數傳入。
private static final int REQUEST_LOCATION = 1503; private void requestSinglePermission() { String locationPermission = Manifest.permission.ACCESS_FINE_LOCATION; int hasPermission = checkSelfPermission(locationPermission); String[] permissions = new String[] { locationPermission }; if (hasPermission != PackageManager.PERMISSION_GRANTED) { requestPermissions(permissions, REQUEST_LOCATION); } else { // Phew - we already have permission! } } 當呼叫requestPermissions()方法後,系統會彈出許可權請求對話方塊。一旦使用者對對話方塊做出迴應, onRequestPermissionsResult()方法就會被呼叫,在該方法內可以檢查使用者做出的授予或者拒絕操作 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case REQUEST_LOCATION: if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Handle permission granted } else { // Handle permission denied } break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); } }
在上面程式碼中,通過requestCode 檢索到grantResults陣列中的許可權。如果此許可權已被授予就可以使用該許可權進行相應的操作。
另一方面,如果我們拒絕授予此許可權,那麼我們需要顯示一些資訊來告知使用者無法繼續操作。
請求多個許可權
在多許可權請求中,我們要做到事情和但許可權請求稍有不同。在下面的例子中,我是先檢查要申請的許可權是否已經或者其中有已經被授予的情況,如果沒有,我把沒有授予的許可權加到一個許可權列表中。接著我將這個列表以引數的形式傳遞給requestPermissions()方法。
private void requestMultiplePermissions() { String locationPermission = Manifest.permission.ACCESS_FINE_LOCATION; String calendarPermission = Manifest.permission.WRITE_CALENDAR; int hasLocPermission = checkSelfPermission(locationPermission); int hasCalPermission = checkSelfPermission(calendarPermission); List permissions = new ArrayList(); if (hasLocPermission != PackageManager.PERMISSION_GRANTED) { permissions.add(locationPermission); } if (hasCalPermission != PackageManager.PERMISSION_GRANTED) { permissions.add(calendarPermission); } if (!permissions.isEmpty()) { String[] params = permissions.toArray(new String[permissions.size()]); requestPermissions(params, REQUEST_PERMISSIONS); } else { // We already have permission, so handle as normal } }
在Android M上宣告許可權
對於只希望在Android-M裝置使用該許可權機制的應用,可以在Manifest檔案中單獨為Android M宣告:
<uses-permission-sdk-mandroid:name="android.permission.ACCESS_FINE_LOCATION"/>
這種形式的定義在M版本以下和普通定義的許可權一樣而不是隻在M版本的裝置上會進行許可權檢查。所以當你使用該方法進行更新應用時不必擔心版本相容性問題。這樣的許可權只會在M版本的裝置上可用在其他情況下是不會被請求的。
你真的需要許可權嗎?
記住在一些功能上可以是用
- ACTION_INSERT 只要滿足需求該action就可以替換一組許可權。設定所需的MIME Type和Intent Extras來插入日曆事件或聯絡人。這樣就不必請求日曆和聯絡人的許可權。
- ACTION_PICK 該Action可以從聯絡人中選擇一個聯絡人,並選擇特定的資料(email, phone number, address),當在該應用中使用這個action時會授予一個臨時的READ_CONTACTS許可權用來讀取聯絡人資訊。
- ACTION_VIEW 與ACTION_PICK共同使用時,此操作可用於檢視所選的詳細的聯絡人URI而不需要任何許可權的授予。這個Action也可以通過在一個有效的定位目的資料來啟動一個地圖Intent。
- ACTION_EDIT 如果與ACTION_PICK一起使用,返回的聯絡人資訊中可以使用URI來編輯聯絡人的詳細資訊。
- ACTION_DIAL 這個Action可以用來開啟一個撥號器或者已經指定好電話號碼的撥號介面。雖然它需要使用者按下呼叫按鈕(見ACTION_CALL),但它不需要使用任何相關的許可權。
相關推薦
解決Android 6.0動態新增許可權問題
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FE
動態新增許可權
請求單一許可權 為了請求單一許可權,我們可以使用checkSelfPermission()方法來檢查應用是否已經授予了該許可權。如下面程式碼所示,如果我們沒有授予該許可權,那麼就需要使用requestPermissions()方法來請求,將要申請的許可權以陣列型別作為引
android動態新增許可權6.0+--許可權操作jar簡化新增許可權步驟。
android動態新增許可權6.0+--記錄android開發過程遇到的一些問題 在android6.0以後即使在xml添加了許可權。 你也需要在程式碼中動態獲取許可權。但使用android自帶的許可
java實現動態許可權(選單管理)動態新增選單,動態新增角色SSM框架
首先是資料庫設計 Menu表(選單表) Role表(角色表) Role_Menu表(角色選單關係表) User表(使用者表) User_Role表(使用者角色關係表) 其他實體類就略過了 在Menu實體類中添加了一個List<Menu&
為bookStore新增許可權【動態代理和註解】
前言 目前為止,我們已經學習了動態代理技術和註解技術了。於是我們想要為之前的bookStore專案新增許可權控制….. 只有使用者有許可權的時候,後臺管理才可以進行相對應的操作….. 實現思路 之前我們做許可權管理系統的時候,是根據使用者請求
批量動態新增分區表
range分區 麻煩 creat 條件篩選 exc interval errors pro rom mysql分區表人為添加不可控性太大,如果出現人員變動交接不利,或者遺忘,會導致業務數據丟失或寫入失敗,同時如果使用分區表較多,逐個添加分區也是挺麻煩的 推薦使用存儲過程+e
vue.set動態新增對象屬性,觸發dom渲染
bject tro 數據 his col def style this lec 當我們給一個props或者data中被觀測的對象添加一個新的屬性的時候,不能直接添加,必須使用Vue.set方法 /** * ==== 選擇產品 ==== * 因為vue實
runtime實戰(二)動態新增方法
runtime的實戰二就是動態新增方法 一:建立一個Person類 我們在Person類的標頭檔案宣告一個eat方法,並不去實現它,當我們呼叫時,會出現如下的崩潰棧 2017-05-01 20:43:06.483 SH_Runtime[2133:104550] -[Pers
Unity UGUI按鈕動態新增點選事件
使用程式碼的方式給按鈕新增點選事件需要引入兩個名稱空間: using UnityEngine.UI; using UnityEngine.Events; 先建立一個介面,並且在介面裡放置一個按鈕: 建立一個Test指令碼,程式碼如下: using
iOS動態新增和獲取屬性
我們可以利用 objc_setAssociatedObject objc_getAssociatedObject 來為類動態新增和獲取屬性 static char dynamicKey; NSArray *array = @[@"4", @"5", @"6"
Java動態生成類以及動態新增屬性
有個技術實現需求:動態生成類,其中類中的屬性來自引數物件中的全部屬性以及來自引數物件propertities檔案。 那麼技術實現支援:使用cglib代理。 具體的實現步驟: 1.cglib的jar包(cgl
【unity】NavMesh 執行時動態新增 OffMeshLink 線。
遊戲裡 有一些場景內的傳送陣, 做尋路時, 之前要美術預埋 OffMeshLink線。 但策劃會換位置, 兩邊就不一致了。 想著 OffMeshLink好像可以動態加。 網上沒有相關資料, 試了一下是可以的。 編輯器下可以動態加, 程式裡也基本可以
Python-動態新增屬性和方法
class Person(): Country='CN' def __init__(self,nm) self.nm=nm 動態新增例項屬性及例項方法: p=Person() p.age=18 #直接賦值,動態新增例項屬性 def set_age(self,age) #定義帶se
安卓6.0動態申請許可權
現在安卓6.0申請許可權的開原始碼也很多,但是不想專案裡引用的東西太多,能不搬的就不搬了,自己寫了一個申請許可權的,在Gerymontion上測試,還能用,如果有需要改善的,請留言. 1 寫一個介面 public interface PermissionLi
動態獲取許可權工具類(方法)
直接上程式碼,大家應該能看懂 private static List<String> permissionList; public static void getPermission(Activity context,String... permission) {
html中元素動態新增與刪除
<div class="unit" > <label>產品引數</label> <input type="button" value="新增" onclick="addProduc
解決android6.0開啟攝像頭許可權"Failed to connect to camera service"的問題 ,動態獲取許可權
android6.0使用camera.open()時需要在onCreate()裡面新增如下程式碼,否則會報錯"Failed to connect to camera service": if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
QML之Menu的動態新增MenuItem
選單是很常用的一個控制元件。可以利用ListView自定義實現,也可以利用Menu直接實現。 本文利用的是QtQuick.Controls 2.3(Qt版本是在Qt5.7之後引入)下面的Menu。 效果如下: 程式碼如下: import QtQuick 2.9 import Qt
web 動態新增城市和二級聯動的實現
動態新增城市 需求: 點選一個按鈕, 動態實現新增城市; 實現步驟: 確定事件型別onclick 對於事件繫結一個函式addLiElement() 獲取到使用者在input輸入框中填寫的資訊; city = d
JS中div的動態新增
新建html檔案,body中加入如下程式碼 //新增一個500*500的div快 <div id="aa" style="width:500px;height:500px;background-color:#999;"> </div> //新增一