用于开始该界面的多个权限请求
private static final int READ_EXTERNAL_STORAGE = 1;
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.activity_pick_images);
checkLocationPermission();
}
private boolean checkLocationPermission() {
PackageManager pm = getPackageManager();//存储权限
boolean EXTERNAL_STORAGE = (PackageManager.PERMISSION_GRANTED ==
pm.checkPermission(Permission.WRITE_EXTERNAL_STORAGE, getPackageName())
&& PackageManager.PERMISSION_GRANTED ==
pm.checkPermission(Permission.READ_EXTERNAL_STORAGE, getPackageName()));
if (!EXTERNAL_STORAGE) {
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE},
READ_EXTERNAL_STORAGE);
return false;
}
initView();//这里可以放置代码逻辑
return true;
}
权限回调(以下是根据下标来判断权限的)
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == READ_EXTERNAL_STORAGE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission Granted
initView();//此处改为你的逻辑函数
} else {
// Permission Denied
Toast.makeText(this, "访问被拒绝!", Toast.LENGTH_SHORT).show();
finish();
}
}
}
以上就可以完成权限的申请和回调,下面呢是个人比较完善一丢丢的!!
优化权限回调
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == READ_EXTERNAL_STORAGE) {
PackageManager pm = getPackageManager();
boolean EXTERNAL_STORAGE = (PackageManager.PERMISSION_GRANTED ==
pm.checkPermission(Permission.WRITE_EXTERNAL_STORAGE, getPackageName())
&& PackageManager.PERMISSION_GRANTED ==
pm.checkPermission(Permission.READ_EXTERNAL_STORAGE, getPackageName()));
if(!EXTERNAL_STORAGE){
showInfoDialog2("您拒绝权限申请,此功能将不正常使用,您可以去设置页面重新授权", "取消", "去设置权限", new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
}, new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);
}
});
}else {
initView();//此处改为你的逻辑函数
}
}
}
信息弹窗
/*信息对话框---两个按钮*/
private DialogUtils dialogUtils;
private TextView du_content;
private TextView down, cancel;
public void showInfoDialog2(String content, String liftStr, String rightStr, final View.OnClickListener leftlistener, final View.OnClickListener rightlistener) {
dialogUtils = new DialogUtils.Builder(this)
.view(com.dingmouren.camerafilter.R.layout.dialog_layout_info)
.gravity(Gravity.CENTER)
.style(com.dingmouren.camerafilter.R.style.dialog_loading)
.cancelTouchout(true)
.addViewOnclick(com.dingmouren.camerafilter.R.id.cancel, new View.OnClickListener() {
@Override
public void onClick(View view) {
if (leftlistener != null)
leftlistener.onClick(view);
dialogUtils.dismiss();
}
})
.addViewOnclick(com.dingmouren.camerafilter.R.id.down, new View.OnClickListener() {
@Override
public void onClick(View view) {
if (rightlistener != null)
rightlistener.onClick(view);
dialogUtils.dismiss();
}
})
.build();
dialogUtils.show();
du_content = dialogUtils.findViewById(com.dingmouren.camerafilter.R.id.du_content);
du_content.setText(content);
down = dialogUtils.findViewById(com.dingmouren.camerafilter.R.id.down);
down.setText(rightStr);
cancel = dialogUtils.findViewById(com.dingmouren.camerafilter.R.id.cancel);
cancel.setText(liftStr);
}
布局XML(简单布局就行,不需要我这么麻烦)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="15dp"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/dialog_10_fff"
android:elevation="2dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical"
android:paddingLeft="45dp"
android:paddingTop="55dp"
android:paddingRight="45dp"
android:paddingBottom="30dp">
<TextView
android:layout_width="225dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="温馨提示"
android:textColor="@color/color666"
android:textSize="16dp" />
<TextView
android:id="@+id/du_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="17dp"
android:layout_marginBottom="10dp"
android:gravity="center"
android:maxWidth="200dp"
android:text="确认删除?"
android:textColor="@color/color666"
android:textSize="14dp" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="0.1dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="0dp"
android:background="@color/coloreee" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_weight="2"
android:gravity="center">
<TextView
android:id="@+id/cancel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/common_btn_selector"
android:gravity="center"
android:paddingLeft="25dp"
android:paddingTop="10dp"
android:paddingRight="25dp"
android:paddingBottom="10dp"
android:text="取消"
android:textColor="@color/color666" />
<TextView
android:layout_width="0.1dp"
android:layout_height="20dp"
android:background="@color/coloreee" />
<TextView
android:id="@+id/down"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/common_btn_selector"
android:gravity="center"
android:paddingLeft="25dp"
android:paddingTop="10dp"
android:paddingRight="25dp"
android:paddingBottom="10dp"
android:text="确认"
android:textColor="@color/color20A1FA" />
</LinearLayout>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="100dp" />
</LinearLayout>
</LinearLayout>
自定义dialog管理类(方便)
package com.dingmouren.camerafilter.util;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
/**
* 自定义dialog管理类
*/
public class DialogUtils extends Dialog {
private Context context;
private boolean cancelTouchout;
private View view;
private int gravity;
private DialogUtils(Builder builder) {
super(builder.context);
context = builder.context;
cancelTouchout = builder.cancelTouchout;
view = builder.view;
gravity = builder.gravity;
}
private DialogUtils(Builder builder, int resStyle) {
super(builder.context, resStyle);
context = builder.context;
cancelTouchout = builder.cancelTouchout;
view = builder.view;
gravity = builder.gravity;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(view);
setCanceledOnTouchOutside(cancelTouchout);
Window win = getWindow();
WindowManager.LayoutParams lp = win.getAttributes();
lp.gravity = gravity;
lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
lp.width = ViewGroup.LayoutParams.MATCH_PARENT;
win.setAttributes(lp);
}
public static final class Builder {
private Context context;
private boolean cancelTouchout;
private View view;
private TextView textView, leftButton, rightButton, TitleView;
private int resStyle = -1;
private int gravity = Gravity.CENTER;
public Builder(Context context) {
this.context = context;
}
public Builder view(int resView) {
view = LayoutInflater.from(context).inflate(resView, null, false);
System.out.println("view");
return this;
}
public Builder view(View resView) {
view = resView;
return this;
}
public Builder SetLeftVisable(boolean show) {
if (show)
leftButton.setVisibility(View.VISIBLE);
else
leftButton.setVisibility(View.GONE);
return this;
}
public Builder gravity(int gravity) {
this.gravity = gravity;
return this;
}
public Builder setTitle(String text, int id) {
TitleView = view.findViewById(id);
TitleView.setText(text);
return this;
}
public Builder settext(String text, int id) {
textView = view.findViewById(id);
textView.setText(text);
return this;
}
public Builder setLeftButton(String text, int id) {
leftButton = view.findViewById(id);
leftButton.setText(text);
return this;
}
public Builder setRightButton(String text, int id) {
rightButton = view.findViewById(id);
if (rightButton != null)
rightButton.setText(text);
return this;
}
public Builder style(int resStyle) {
this.resStyle = resStyle;
return this;
}
public Builder cancelTouchout(boolean val) {
cancelTouchout = val;
return this;
}
public Builder addViewOnclick(int viewRes, View.OnClickListener listener) {
if (view.findViewById(viewRes) != null)
view.findViewById(viewRes).setOnClickListener(listener);
return this;
}
public DialogUtils build() {
if (resStyle != -1) {
return new DialogUtils(this, resStyle);
} else {
return new DialogUtils(this);
}
}
}
}
应该没有什么问题了!!!