使用AddPermission,获取Android6.o权限,附上一个自定义的dialog,简单实用。

先来看看效果。。

在这里插入图片描述

1.添加AddPermission的依赖
gitbub地址:https://github.com/yanzhenjie/AndPermission
implementation ‘com.yanzhenjie:permission:2.0.0-rc12’

推荐先看AddPermission的文档:http://www.yanzhenjie.com/AndPermission/cn/runtime/

2.基本使用
AndPermission.with(this)
.runtime()
.permission(Permission.WRITE_EXTERNAL_STORAGE)
.onGranted(new Action() {
@Override
public void onAction(List permissions) {
// TODO 权限同意
}
}).onDenied(new Action() {
@Override
public void onAction(List permissions) {
// TODO 权限拒绝
}
}).start();

被拒绝第一次后,第二次打开应用再次请求调用

public static Rationale<List<String>> mRationale = new Rationale<List<String>>() {
    @Override
    public void showRationale(Context context, List<String> data, RequestExecutor executor) {
        showDialog(context, executor, permissions);
    }
};

/*、
* Dialog,提示是否继续申请权限,继续 executor.execute();取消 executor.cancel();
在这里插入图片描述
* */

public static void showDialog(Context context, final RequestExecutor executor, List<String> permissions) {
    /*把权限转化成文字*/
    String permissionText = TextUtils.join(",\n", permissions);

    final MyDialog dialog = new MyDialog(context,R.style.customDialog,R.layout.my_dialog,new int[]{R.id.dialog_cancel,R.id.dialog_sure});

    dialog.setOnCenterItemClickListener(new MyDialog.OnCenterItemClickListener() {
        @Override
        public void setOnMyDialogClickListener(MyDialog dialog, View view) {
          switch (view.getId()){
              case R.id.dialog_cancel:
                  Log.d(TAG, "setOnMyDialogClickListener: 取消");
                  executor.cancel();
                  break;
              case R.id.dialog_sure:
                  Log.d(TAG, "setOnMyDialogClickListener: 确定");
                  executor.execute();
                  break;
          }
        }
    });
    Log.d(TAG, "showDialog: ");
    dialog.show();
    dialog.setContentText("云图书馆想获取"+permissionText+"权限");

}

/*、
* 获取权限
* @param context
* @param permissions 权限组合,可以写多个权限
* */
public void requestPermission(final Context context,final String… permissions)
AndPermission.with(context)
.runtime()
.permission(permissions)
.rationale(mRationale)/权限被拒绝后再下一次启动后再次申请获取权限/
/权限同意/
.onGranted(new Action<List>() {
@Override
public void onAction(List data) {
}
})
/权限拒绝/
.onDenied(new Action<List>() {
@Override
public void onAction(List data) {
/权限总是被拒绝/ if(AndPermission.hasAlwaysDeniedPermission(context,permissions)) {
//可以在这里让进入系统设置权限
}
Toast.makeText(context, “权限拒绝”, Toast.LENGTH_SHORT).show();
}
}).start();

自定义的Dialog

package com.example.his.cloudlibaray.utils;

import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;

import com.example.his.cloudlibaray.R;

public class MyDialog extends Dialog implements View.OnClickListener{

private Context mContext;
private int layoutRes;
private int[] listenedItem;
private TextView contentTv;


public MyDialog(@NonNull Context context, int themeResId, int layoutRes, int[] listenedItem) {
    super(context, themeResId);
    this.mContext = context;
    this.layoutRes = layoutRes;
    this.listenedItem = listenedItem;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Window win = getWindow();
    win.setGravity(Gravity.CENTER);/*设置对话框居中*/
    setContentView(layoutRes);
    contentTv = findViewById(R.id.dialog_text);
    WindowManager window = ((Activity) mContext).getWindowManager();
    Display display = window.getDefaultDisplay();
    WindowManager.LayoutParams lp = getWindow().getAttributes();
    /*设置dialog宽度为屏幕的4/5*/
    lp.width = display.getWidth() * 3 / 5;
    getWindow().setAttributes(lp);
    /*获取当前view,实现圆角*/
    View view = getWindow().getDecorView();
    ViewStyleSetter viewStyleSetter = new ViewStyleSetter(view);
    viewStyleSetter.setRound(Utils.dip2px(mContext,10));

    //遍历控件,添加点击监听事件
    for (int id : listenedItem) {

        TextView tv = (TextView)findViewById(id);
        tv.setOnClickListener(this);
    }

}
private OnCenterItemClickListener listener;

@Override
public void onClick(View v) {
    dismiss();
    listener.setOnMyDialogClickListener(this,v);

}

public interface OnCenterItemClickListener{
    void setOnMyDialogClickListener(MyDialog dialog,View view);

}
public void setOnCenterItemClickListener(OnCenterItemClickListener listener){
    this.listener = listener;

}

/*设置对话框的内容*/
public void setContentText(String text){
    contentTv.setText(text);
}


/*
 * 点击dialog外部消失*/
public void setCancelTouch(boolean cancel) {
    setCanceledOnTouchOutside(cancel);

}

}

对应的布局文件

<?xml version="1.0" encoding="utf-8"?>

<TextView
    android:id="@+id/dialog_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="20dp"
    android:layout_marginTop="20dp"
    android:gravity="center"
    android:text="需要写的信息"
    android:textColor="@android:color/black"
    android:textSize="13sp" />


<View
    android:layout_width="match_parent"
    android:layout_height="1px"
    android:background="@color/title_bar"/>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="30dp"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/dialog_cancel"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:text="取消"
        android:clickable="true"
        android:background="@drawable/btn_back"
        android:textColor="@color/light_blue_2"
        android:textSize="15sp" />

    <View
        android:layout_height="match_parent"
        android:layout_width ="1px"
        android:background="@color/title_bar"/>
    <TextView
        android:id="@+id/dialog_sure"
        android:layout_width="0dp"
        android:clickable="true"
        android:background="@drawable/btn_back"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:text="确定"
        android:textColor="@color/light_blue_2"
        android:textSize="15sp" />
</LinearLayout>
<color name="light_blue_2">#6c91c4</color>
<color name="title_bar">#9b9b9b</color>

实现圆角所需要的类在这里
https://www.cnblogs.com/Dionexin/p/5727297.html

猜你喜欢

转载自blog.csdn.net/weixin_42705415/article/details/83689379