Fuck the permissions in Android M
FcPermissions is a library to simplify basic system permissions logic when targeting Android M or higher. Chinese README is here
You can install FcPermissions by adding the following dependency to your
build.gradle:
allprojects { repositories { jcenter() maven { url "https://jitpack.io" } } }
dependencies { compile 'com.github.lypeer:FcPermissions:v0.0.1' }
The library applies three way to request permissions : implementing an interface , extending an abstract class and creating a builder .
Firstly , let your
Activity/
Fragmentimplement
FcPermissionsCallbacksinterface . There are two methods in the interface :
void onPermissionsGranted(int requestCode, List perms): when user grants the permissions we have requested , this method will be invoked .
Permsis the list of granted permissions .
void onPermissionsDenied(int requestCode, List perms): when user denies the permissions we have requested , this method will be invoked .
Permsis the list of denied permissions .
What you should remember is that you should invoke
FcPermissions.checkDeniedPermissionsNeverAskAgain()method in the
onPermissionsDenied()to handler the solution user clicks "Never Ask Again" ( in the requesting dialog ) :
java @Override public void onPermissionsDenied(int requestCode, List perms) { Toast.makeText(this, R.string.prompt_been_denied, Toast.LENGTH_LONG).show(); FcPermissions.checkDeniedPermissionsNeverAskAgain(this, getString(R.string.prompt_we_need_camera), R.string.setting, R.string.cancel, null, perms); }
Otherwise , you must override the
onRequestPermissionsResultmethod and transport its parameters to
FcPermissions.onRequestPermissionsResult():
java @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); FcPermissions.onRequestPermissionsResult(requestCode , permissions , grantResults , this); }
At last , when you want to request permissions , you can invoke the
FcPermissions.requestPermissions()method . You can find the detail about this method in the source code .
A demo using this way to request permissions is MainActivity.java .
FcPermissions provides three abstract classes :
You can choose a suitable class to extend . They are abstract class , so you must override some methods after extending them :
void onPermissionsGranted(int requestCode, List perms):when user grants the permissions we have requested , this method will be invoked .
Permsis the list of granted permissions .
void onPermissionDenied(int requestCode, List perms):when user denies the permissions we have requested , this method will be invoked .
Permsis the list of denied permissions .
when you want to request permissions , you can invoke the
requestPermissions()method ( NOT
FcPermissions.requestPermissions()) .
A demo using this way to request permissions is MainBaseActivity.java .
The last but not least , creating a builder to request permissions . The basic class working for this way is
FcPermissionB.java( NOT FcPermissions.java above ) .
Firstly , just like what we do in the fist way , invoke the
FcPermissionsB#checkDeniedPermissionsNeverAskAgain()method in the
onPermissionsDenied()to handler the solution user clicks "Never Ask Again" ( in the requesting dialog ) :
java @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); mFcPermissionsB.onRequestPermissionsResult(requestCode , permissions , grantResults , this); }
Then you can create a builder and begin to request permissions : ```java private void requestCameraPermission() { mFcPermissionsB = new FcPermissionsB.Builder(this) .onGrantedListener(new OnPermissionsGrantedListener() { @Override public void onPermissionsGranted(int requestCode, List perms) {
} }) .onDeniedListener(new OnPermissionsDeniedListener() { @Override public void onPermissionsDenied(int requestCode, List perms) {} }) .positiveBtn4ReqPer(android.R.string.ok) .negativeBtn4ReqPer(R.string.cancel) .positiveBtn4NeverAskAgain(R.string.setting) .negativeBtn4NeverAskAgain(R.string.cancel) .rationale4ReqPer(getString(R.string.prompt_request_camara))//必需 .rationale4NeverAskAgain(getString(R.string.prompt_we_need_camera))//必需 .requestCode(RC_CAMERA)//必需 .build();
mFcPermissionsB.requestPermissions(Manifest.permission.CAMERA);//request permissions
} ```
There are three parameters must be added to builder :
You can find other parameters's usage in the source code .
A demo using this way to request permissions is MainBuilderActivity.java .
This library is an extension of easypermissions , but I change some code in it and create two other ways to make the work easier . So it may be a better choose for you to handler permissions .
Copyright 2014-2016 lypeer.Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.