哈哈哪廓,大家好,我是 涼涼
做安卓前端開發(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í)滴读拆,歡迎各位來騷擾
哈哈擅憔,人生在世,開心就好