android6.0运行时权限完美封装方法

前几天看了郭大神的运行时权限的专讲,深受启发,由于现在基于目前项目中的运行时权限封装的还不是那么完美,趁着郭神建议的还是历历在目。于是把它完整的敲了下来。并在此基础上添加上自己的一些见解,封装成一个完整的demo,希望与大家进行交流与。

在这里我进行了简单的在activity中简单进行获取权限和工具类封:

某一个权限被禁止或者是所有的权限被禁止,这里我做了去到烯烃界面去设置的处理:

如果要开启多个权限的话,则可能不同的手机显示的效果不同,有些手机在权限Dialog上显示需要获取权限的个数,但有些手机需要多少个权限显示多少个。

最后一步处理:如果某个权限被禁止的话,则到设置界面去提示用户去打开权限:

部分代码:

/**

* 类功能描述:在activity中进行检测权限的简单方法 </br>

* 博客地址:http://blog.csdn.net/androidstarjack

* @author 老于

* @version 1.0 </p> 修改时间:</br> 修改备注:</br>

*/

public class CheckPermissionOnActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_checkpermission1);

ButterKnife.bind(this);

}

@OnClick({R.id.btn_runtimne_onClick, R.id.btn_runtimne_onClick_multify,R.id.btn_runtimne_onClick_seting})

public void onMyListener(View v){

switch (v.getId()){

case R.id.btn_runtimne_onClick:

requestToUserPersiom(1);

break;

case R.id.btn_runtimne_onClick_multify:

requestToUserPersiom(2);

break;

case R.id.btn_runtimne_onClick_seting:

Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

intent.setData(Uri.parse("package:"+ getPackageName()));

startActivity(intent);

break;

}

}

public void requestToUserPersiom(int permisionIndexCount){

switch (permisionIndexCount){

case 1:

ActivityCompat.requestPermissions(CheckPermissionOnActivity.this, new String[]{android.Manifest.permission.CALL_PHONE},100);//去请求权限

break;

case 2:

case 3:

case 4:

ActivityCompat.requestPermissions(CheckPermissionOnActivity.this, new String[]{android.Manifest.permission.CALL_PHONE,android.Manifest.permission.WRITE_EXTERNAL_STORAGE},100);

break;

}

}

@Override

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

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

if(requestCode == 100){

if(grantResults.length >0 ){

for (int i = 0; i < grantResults.length; i++) {

if( grantResults[i] == PackageManager.PERMISSION_DENIED){//拒绝啦

return ;

}

}

doosmething();

}

}

}

/**

* 做其他事情

*/

public void doosmething(){

GetToast.useString(CheckPermissionOnActivity.this,"开始做其他事情了");

}

}

封装成BaseActivitgy工具类:

public class BasePermisitionActivity extends Activity {

private static final int REQUESTPERMISSION_CODE = 100;

private static QuestPermissionListener questPermissionListener;

private AlertDialog.Builder builder;

private AlertDialog alertDialog;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

ActivityManager.addPermissionActivty(this);

}

public static void requestRuntimePermission(String [] permissions,QuestPermissionListener questPermissionListener){

Activity actyivty = ActivityManager.permissionActivilyList.get(ActivityManager.permissionActivilyList.size() -1);

if(actyivty == null){

return;

}

List<String> neetRequestPermisList = new ArrayList<String>();

for (String permission : permissions) {

if(ActivityCompat.checkSelfPermission(actyivty,permission) == PackageManager.PERMISSION_DENIED){

neetRequestPermisList.add(permission);

}

}

BasePermisitionActivity.questPermissionListener = questPermissionListener;

if(!neetRequestPermisList.isEmpty()){

ActivityCompat.requestPermissions(actyivty,neetRequestPermisList.toArray(new String[neetRequestPermisList.size()]),REQUESTPERMISSION_CODE);

}

}

@Override

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

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

if(requestCode == REQUESTPERMISSION_CODE){

for (int i = 0; i < grantResults.length; i++) {

int granrRequest = grantResults[i];

if(granrRequest == PackageManager.PERMISSION_DENIED){//权限被拒绝啦

if(questPermissionListener != null){

questPermissionListener.denySomePermission();

}

return;

}

}

questPermissionListener.doAllPermissionGrant();

}

}

@Override

protected void onResume() {

super.onResume();

}

public void onResumeCheckPermission(String ...permission){

if(PermisionControl.lackMissPermission(this,permission)){

showMissPermissionDialog();

}

}

@Override

protected void onDestroy() {

super.onDestroy();

ActivityManager.removePermissionActiivty(this);

}

/**

* 丢失权限,进行弹框设置

*/

public void showMissPermissionDialog() {

if (builder == null) {

builder = new AlertDialog.Builder(BasePermisitionActivity.this);

builder.setTitle("帮助");

String msg = "当前应用缺少必要权限。<br>\r请点击\"设置\"-\"权限\"-打开所需权限。<br>\r\r最后点击两次后退按钮,即可返回。";

builder.setMessage(Html.fromHtml(msg));

//materialDialog.setMovementMethod(LinkMovementMethod.getInstance());

builder.setPositiveButton("设置", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

alertDialog.dismiss();

}

});

builder.setNegativeButton("退出", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

alertDialog.dismiss();

startAppSettings();

}

});

alertDialog = builder.create();

alertDialog.show();

} else {

alertDialog.show();

}

}

// 启动应用的设置

public void startAppSettings() {

try {

Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

intent.setData(Uri.parse("package:"+ getPackageName()));

startActivity(intent);

} catch (Exception e) {

e.printStackTrace();

}

}

}

与其相关的工具类:

/**

* 类功能描述:6.0运行时权限 </br>

* permission权限控制器</br>

* 博客地址:http://blog.csdn.net/androidstarjack

* @author 老于

* Created on 2017/1/3/002

* @version 1.0 </p> 修改时间:</br> 修改备注:</br>

*/

public class PermisionControl {

/**

* 检查所有的权限是否被禁止

*/

public static boolean lackMissPermission(Context cnt ,String... permission){

boolean relust = true ;

for (String per : permission) {

if(ActivityCompat.checkSelfPermission(cnt,per) == PackageManager.PERMISSION_DENIED){

relust = false ;

break;

}

}

return relust;

}

/**

* 请求运行时权限

* eg:

*/

public void requestRuntimePermission(QuestPermissionListener questPermissionListener, String... permissions){

BasePermisitionActivity.requestRuntimePermission(permissions,questPermissionListener);

}

}

以及其他的一些封装:

public class PermissionUsage {

/**********权限:打电话,写入内存卡,定位********/

public static String[] LOACATION_CAMERA = { Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.CALL_PHONE,

Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_EXTERNAL_STORAGE};

/**********权限:读取内存卡********/

public static String[] READ_EXTRASORE = { Manifest.permission.READ_EXTERNAL_STORAGE};

/**********权限:打电话权限********/

public static String[] RCALL_PHONE = { Manifest.permission.READ_EXTERNAL_STORAGE};

}

以上这篇android6.0运行时权限完美封装方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

以上是 android6.0运行时权限完美封装方法 的全部内容, 来源链接: utcz.com/p/240949.html

回到顶部