本篇文章給大家分享的是有關(guān)深入淺析Android動(dòng)態(tài)權(quán)限的機(jī)制,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

Android6.0以后引入了動(dòng)態(tài)權(quán)限機(jī)制,一些系統(tǒng)權(quán)限的分配需要在app運(yùn)行中進(jìn)行分配,而不只是在AndroidManifest中指定。
本篇將針對(duì)動(dòng)態(tài)權(quán)限的底層分配過(guò)程進(jìn)行分析(基于Android-6.0.1)。
權(quán)限分配
我們先看一下請(qǐng)求分配權(quán)限的代碼
//frameworks/support/v4/java/android/support/v4/app/ActivityCompat.java
public static void requestPermissions(final @NonNull Activity activity,
final @NonNull String[] permissions, final int requestCode) {
if (Build.VERSION.SDK_INT >= 23) {//對(duì)于Android M 以及以上的權(quán)限的分配
ActivityCompatApi23.requestPermissions(activity, permissions, requestCode);
} else if (activity instanceof OnRequestPermissionsResultCallback) {//Android M以下的權(quán)限分配
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
//請(qǐng)求分配的權(quán)限結(jié)果,如分配就是PERMISSION_GRANTED
final int[] grantResults = new int[permissions.length];
PackageManager packageManager = activity.getPackageManager();
String packageName = activity.getPackageName();
final int permissionCount = permissions.length;
//通過(guò)包管理的checkPermission來(lái)檢驗(yàn)是否分配權(quán)限
for (int i = 0; i < permissionCount; i++) {
grantResults[i] = packageManager.checkPermission(
permissions[i], packageName);
}
((OnRequestPermissionsResultCallback) activity).onRequestPermissionsResult(
requestCode, permissions, grantResults);
}
});
}
}
當(dāng)前標(biāo)題:深入淺析Android動(dòng)態(tài)權(quán)限的機(jī)制-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://chinadenli.net/article0/diisoo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、建站公司、搜索引擎優(yōu)化、網(wǎng)站設(shè)計(jì)公司、定制開(kāi)發(fā)、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容