安卓授權(quán)(permissions)完整篇

哈哈哪廓,大家好,我是 涼涼

做安卓前端開發(fā)的都知道,自從谷歌推出 SDK23 后,之前開發(fā)的6.0以前的代碼之后都會遇到同一問題 —— 授權(quán)

隨著人們對自己的隱私越來越看重立镶,移動端很多功能都被添加了授權(quán)功能來保護個人的隱私。6.0推出之前类早,很多人

的隱私經(jīng)常會被他人竊取媚媒,這就讓自己的很多隱私被他人惡意化,獲取您的通訊錄進行各種電話短信困擾涩僻。有的還會

獲取您的相冊各種資料缭召,所以授權(quán)這塊就更加重視了。哈哈逆日,不說廢話了嵌巷,往下看,一步步交你怎么完善授權(quán)這塊的

代碼

在 AndroidManifest 上面注冊app需要的功能室抽,只要是涉及到個人隱私的都需要授權(quán)后才能使用

有兩種方案:

1搪哪、在自己的Activity申請

2、用第三方庫申請

不用說狠半,肯定第三方庫拉噩死,不過這里為了溫習(xí)以前的知識,就把兩種實現(xiàn)邏輯都實現(xiàn)出來了

需要原碼的往下哈

1.效果圖

2.安卓授權(quán)


申請權(quán)限: (以 SD卡神年、創(chuàng)建文件已维、設(shè)備讀取 的權(quán)限為例子)

<--?SD卡、創(chuàng)建文件已日、設(shè)備讀取 -->

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

自己封裝的一個動態(tài)申請權(quán)限類

// SD卡垛耳、創(chuàng)建文件、設(shè)備讀取授權(quán)

public static final int PERMISSION_KEY =1020;

public static final String[]PERMISSION =new String[]{

Manifest.permission.READ_EXTERNAL_STORAGE,

? ? ? ? Manifest.permission.WRITE_EXTERNAL_STORAGE,

? ? ? ? Manifest.permission.READ_PHONE_STATE,

};

Activity動態(tài)申請授權(quán)

/**

* 請求權(quán)限

* @param permissions 需要的權(quán)限列表

* @param requestCode 請求碼

*/

protected void requestPermission(String[] permissions, int requestCode) {

mRequestCode = requestCode;

? ? if (checkPermissions(permissions)) {

permissionSuccess(requestCode);

? ? }else {

List needPermissions = getDeniedPermissions(permissions);

? ? ? ? ActivityCompat.requestPermissions(this, needPermissions.toArray(new String[needPermissions.size()]), requestCode);

? ? }

}

/**

* 檢查所需的權(quán)限是否都已授權(quán)

* @param permissions

* @return

*/

private boolean checkPermissions(String[] permissions) {

// 手機版本 SDK 低于23 ,在Manifest 上注冊有效堂鲜,大于 23 的(android6.0以后的)栈雳,讀取手機的隱私需要在代碼動態(tài)申請

? ? if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {?

return true;

? ? }

for (String permission : permissions) {

if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {

return false;

? ? ? ? }

}

return true;

}

/**

* 獲取所需權(quán)限列表中需要申請權(quán)限的列表

*

* @param permissions

* @return

*/

private ListgetDeniedPermissions(String[] permissions) {

List needRequestPermissionList =new ArrayList<>();

? ? for (String permission : permissions) {

// 檢查權(quán)限,如果沒有授權(quán)就添加

? ? ? ? if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED || ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {

needRequestPermissionList.add(permission);

? ? ? ? }

}

return needRequestPermissionList;

}

授權(quán)成功,在 Activity 的 onRequestPermissionsResult 會有回調(diào)

@Override

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[]grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

? ? //系統(tǒng)請求權(quán)限回調(diào)

? ? if (requestCode ==mRequestCode) {

if (PermissionApply.verifyPermissions(grantResults)) {

permissionSuccess(mRequestCode);

? ? ? ? }else {

permissionFail(mRequestCode);

? ? ? ? }

}

}

然后在MainActivity 上面

public class MainActivityextends BaseActivityimplements OnPermission {

@Override

? ? protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

? ? ? ? setContentView(R.layout.activity_main);

? ? ? ? // 授權(quán)SD卡缔莲、創(chuàng)建文件哥纫、設(shè)備讀取

? ? ? ? setOnPermission(this);

? ? ? ?//?

? ? ? ? requestPermission(PermissionApply.PERMISSION, PermissionApply.PERMISSION_KEY);

? ? }

@Override

? ? public void permissionFail(int requestCode) {

}

@Override

? ? public void permissionSuccess(int requestCode) {

}

}

好啦,授權(quán)這塊就ok啦痴奏,哈哈蛀骇,是不是很簡單

3.項目資源

https://github.com/liangyongchen/PermissionsStudy

4.第三方庫申請

implementation 'pub.devrel:easypermissions:2.0.1'

// 已授權(quán)相機為例子

//申請相機權(quán)限
public static boolean requiresCameraPermission(Activity activity) {
? ? ?String[] perms = {Manifest.permission.CAMERA};
? ? ?if (EasyPermissions.hasPermissions(activity, perms)) {
? ? ? ? ? ? return true;
? ? ? } else {
? ? ? ? ? ? EasyPermissions.requestPermissions( activity, "需要相機權(quán)限,來支持程序功能", perms);
?}
? ?return false;
}

具體使用可以查看:http://www.reibang.com/p/2b3661928e66

本教程是給剛?cè)肼毑痪玫某绦騿T學(xué)習(xí)滴读拆,歡迎各位來騷擾

哈哈擅憔,人生在世,開心就好

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末檐晕,一起剝皮案震驚了整個濱河市暑诸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辟灰,老刑警劉巖个榕,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異伞矩,居然都是意外死亡笛洛,警方通過查閱死者的電腦和手機夏志,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門乃坤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沟蔑,你說我怎么就攤上這事湿诊。” “怎么了瘦材?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵厅须,是天一觀的道長。 經(jīng)常有香客問我食棕,道長朗和,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任簿晓,我火速辦了婚禮眶拉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘憔儿。我一直安慰自己忆植,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著朝刊,像睡著了一般耀里。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拾氓,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天冯挎,我揣著相機與錄音,去河邊找鬼咙鞍。 笑死织堂,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的奶陈。 我是一名探鬼主播易阳,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吃粒!你這毒婦竟也來了潦俺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤徐勃,失蹤者是張志新(化名)和其女友劉穎事示,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體僻肖,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡肖爵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了臀脏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劝堪。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖揉稚,靈堂內(nèi)的尸體忽然破棺而出秒啦,到底是詐尸還是另有隱情,我是刑警寧澤搀玖,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布余境,位于F島的核電站,受9級特大地震影響灌诅,放射性物質(zhì)發(fā)生泄漏芳来。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一猜拾、第九天 我趴在偏房一處隱蔽的房頂上張望即舌。 院中可真熱鬧,春花似錦关带、人聲如沸侥涵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芜飘。三九已至务豺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嗦明,已是汗流浹背笼沥。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留娶牌,地道東北人奔浅。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像诗良,于是被迫代替她去往敵國和親汹桦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359