Android 運行時權限
半年前換過手機之后,就發現許多軟件在安裝之后已經授權過的內容,實際使用的過程中,會再次向我詢問權限。這幾天在開發的過程中,也遇到了明明在AndroidManifest.xml文件中申請過權限了,可是程序依舊拋錯,沒有權限的問題。調查以后發現,Android在6.0系統中引用了運行時權限這個功能,從來更好的保護用戶的安全和隱私。
Android將權限歸為兩類,一類是普通權限,一類是特殊權限。對于不會威脅到用戶安全和隱私的普通權限,系統會自動幫我們進行授權,對于危險權限,必須用戶授權。以下是危險權限:
比如,我們需要申請讀寫存儲文件的權限,可以這么申請:
String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE , Manifest.permission.READ_EXTERNAL_STORAGE};
List<String> mPermissionList = new ArrayList<String>();
for (int i = 0; i < permissions.length; i++) {
if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
mPermissionList.add(permissions[i]);
}
}
if (mPermissionList.isEmpty()) {
return;
}
String[] permissionArray = mPermissionList.toArray(new String[mPermissionList.size()]);
ActivityCompat.requestPermissions(this, permissionArray, 1);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, 1);
}
調用完畢之后,系統會彈出詢問權限是否授權的dialog,無論統一還是拒絕都會調用onRequestPermissionsResult()方法,授權結果會封裝在grantResults中。
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case 1:
for (int i = 0; i < permissions.length; i++) {
if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
//判斷是否勾選禁止后不再詢問
boolean showRequestPermission = ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[i]);
if (showRequestPermission) {
ActivityCompat.requestPermissions(this, new String[]{permissions[i]}, 1);
} else {
// 如果用戶在過去拒絕了權限請求,并在權限請求系統對話框中選擇了 Don’t ask again 選項,此方法將返回 false。如果設備規范禁止應用具有該權限,此方法也會返回 false。
Toast.makeText(this, "請前往設置開啟權限", Toast.LENGTH_SHORT).show();
return;
}
}
}
......
break;
default:
break;
}
}
參考:第一行代碼第2版
智能推薦
Android 6.0 運行時權限
什么時候需要考慮運行時權限 正常權限和危險權限、權限組 關于權限組的說明:如果app運行在Android 6.x的機器上,對于授權機制是這樣的。如果你申請某個危險的權限,假設你的app早已被用戶授權了同一組的某個危險權限,那么系統會立即授權,而不需要用戶去點擊授權。比如你的app對READ_CONTACTS已經授權了,當你的app申請WRITE_CONTACTS時,系統...
Android-(17)運行時權限
Android運行時權限 權限分為普通權限和危險權限,普通權限會自動申請,危險權限需要用戶手動申請:危險權限: 直接撥打電話 需要添加上權限: 高版本會存在問題,修改代碼: 贊微海報分享...
Android 6.0 運行時權限處理
6.0之前的權限模型 在AndroidManifest中聲明可能用到的所有權限 用戶在安裝時,系統展示所有權限,用戶安裝即授予所有權限,取消則拒絕安裝 6.0新的運行時權限 將權限分為一般權限(Normal Permissions)和危險權限(Dangerous Permission)兩種,一般權限跟以前一樣在AndroidManifest聲明,危險權限需要開發者在代碼中手動的動態申請 動態申請權...
Android6.0運行時權限
在記事本應用中插入圖片時,參考網上的知識來獲取手機中的圖片,然而報錯說 權限需要在運行時獲取,然后發現在Android6.0之后,加入了運行時權限,以保障用戶的隱私 定義 Android的權限機制從第一個版本就有了,一些軟件流氓,不管用不用的到這些權限,都會把權限全部申請了。 然后Android針對這些問題,在Android 6.0(API23)時加入了運行時權限,從而更好的保護了用戶的隱私安全。...
android6.0運行時權限
一.概述 為了保護系統的完整性和用戶隱私權,android6.0(API 級別 23)引入了運行時權限的概念。 1.概念: android6.0運行時權限是使用戶可直接在運行時管理應用權限的一種新的權限模式。 2.變化: 對象\系統版本 Android6.0以下 Android6.0以后 用戶 用戶只有在同意權限列表之后才能完成應用的安裝 用戶可為所安裝的各個應用分別授予或撤銷權限,對應用的功能進...
猜你喜歡
Android 6.0 運行時權限
什么時候需要考慮運行時權限 正常權限和危險權限、權限組 權限的申請(代碼注釋很詳細,直接上代碼了) DEMO:http://download.csdn.net/download/qq_27280457/9878685...
Android 6.0 運行時權限處理
一、運行時權限介紹 Android 6.0在我們原有的AndroidManifest.xml聲明權限的基礎上, 又新增了運行時權限動態檢測,以下權限都需要在運行時判斷: 身體傳感器 日歷 攝像頭 通訊錄 地理位置 麥克風 電話 短信 存儲空間 二、運行時權限處理 的所有權限(只要在Mainifest里面聲明的權限默認都給予了),所以如果你以前的APP設置的targetSdkVersion低于23,...
Android6.0運行時權限
從 Android 6.0(API 級別 23)開始,用戶在使用軟件時向其授予權限,而不是在安裝時授權。這個方法可以簡化安裝過程,用戶在安裝或者更新軟件時不需要授予權限。它還能讓用戶對應用的功能進行控制。例如一個攝影應用,他使用攝像頭權限是正常的,但是用戶無法理解這個應用要讀取聯系人信息。 系統權限分為兩類:正常權限跟危險權限 正常權限不會直接給用戶隱私權帶來風險。在AndroidManifest...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...