前言
android 6.0加入了運行時權限功能后硅则,目前通用的解決方案大體可分為2種:
- 在需要使用權限的地方即時申請癞揉,用戶允許后繼續(xù)訪問筐赔,用戶拒絕的話铣猩,就是PM關心的事情了
- 在app啟動時,一次性申請app所需要的所有權限茴丰,用戶允許后照常使用达皿,用戶拒絕的話,那么又成了PM該關心的事情了
而今天這篇文章提供的解決方案贿肩,就是上述的方案二(支F寶的解決方案)
一 效果圖
效果圖 2.04MB
二 使用方法
最新版本號
- 在你root的gradle中添加引用
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
然后在module的gradle中添加引用
dependencies {
compile 'com.github.kaxi4it:QuickPermissions:1.0'
}
- 在程序的首頁或者你認為合適的地方峦椰,參考如下代碼自行添加
public class MainActivity extends AppCompatActivity {
/**
* TODO 配置所需的全部權限
* 9個危險權限組分類,如有申請汰规,則保留汤功,如無申請,則整行注釋
* 權限組是指當組內權限被允許后溜哮,那么同組的權限則都允許使用
* 以下是6.0下九組危險權限分類滔金,請根據自己app的實際情況調整
* 假設同時需要READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE權限時,可只申請一個茂嗓,另一個也會默認通過
*/ private String[] permissions = new String[]{
Manifest.permission.READ_CALENDAR,//WRITE_CALENDAR
Manifest.permission.CAMERA,
Manifest.permission.READ_CONTACTS,//WRITE_CONTACTS餐茵,GET_ACCOUNTS
Manifest.permission.ACCESS_FINE_LOCATION,//ACCESS_COARSE_LOCATION
Manifest.permission.RECORD_AUDIO,
Manifest.permission.READ_PHONE_STATE,//CALL_PHONE,READ_CALL_LOG,WRITE_CALL_LOG,ADD_VOICEMAIL,USE_SIP,PROCESS_OUTGOING_CALLS
Manifest.permission.BODY_SENSORS,
Manifest.permission.SEND_SMS,//RECEIVE_SMS,READ_SMS,RECEIVE_WAP_PUSH,RECEIVE_MMS
Manifest.permission.READ_EXTERNAL_STORAGE,//WRITE_EXTERNAL_STORAGE
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
new CheckPermissionsForAPI23(this, permissions);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
checkPermissionsResult(requestCode, resultCode);
}
/**
* 處理用戶拒絕權限后的操作
*/
private void checkPermissionsResult(int requestCode, int resultCode) {
//sdk23+用 如果用戶拒絕賦予你所需要的權限 則直接退出app,if內方法可自行斟酌
if (requestCode == PermissionsActivity.REQUEST_CODE && resultCode == PermissionsActivity.PERMISSIONS_DENIED) {
finish();
}
}
}
其中述吸,permissions數組里忿族,每一行代表一個權限組,當你同時需要READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE權限時蝌矛,可只申請一個道批,另一個也會默認通過,所以可以只申請一個入撒,但是也不要隨意申請你app中不需要的權限隆豹,否則你的app會一直要求用戶給予權限,從而導致app無法使用
checkPermissionsResult
方法中衅金,可自行處理如何應對用戶拒絕權限后的邏輯噪伊,demo中是直接關閉app,真實案例上氮唯,其實我也是這樣的,_
CheckPermissionsForAPI23
方法會在需要申請權限時姨伟,創(chuàng)建一個空的activity進行權限申請?zhí)幚淼牟僮鞒土穑唧w代碼可以在github上詳細查看,此處不贅述夺荒。
三 最終章
按照如上方式正確操作后瞒渠,就可以做出仿支F寶的權限申請流程了
項目完整代碼在 https://github.com/kaxi4it/QuickPermissions 中可查看