Android 6.0运行时权限 baseactivity简单封装
2017-02-23 11:01
465 查看
import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.os.Build; import android.os.IBinder; import android.os.PersistableBundle; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.Toast; public abstract class BaseActivity extends AppCompatActivity { protected BaseFragment currentFragment; private long lastBackTime = 0; private static final long TIME_INTERVAL = 2 * 1000; @Override public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) { super.onCreate(savedInstanceState, persistentState); //写死竖屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); initIntentParam(getIntent()); } // 初始化传入的参数 protected abstract void initIntentParam(Intent intent); // /** // * 添加或者显示 fragment // * // * @param transaction // * @param fragment // */ // protected void addOrShowFragment(FragmentTransaction transaction, Fragment fragment) { // if (currentFragment == fragment) // return; // // if (!fragment.isAdded()) { // 如果当前fragment未被添加,则添加到Fragment管理器中 // transaction.hide(currentFragment).add(R.id.fl_content, fragment).commit(); // } else { // transaction.hide(currentFragment).show(fragment).commit(); // } // // currentFragment = (BaseFragment) fragment; // // setToolbarStyle(); // } // // protected void setToolbarStyle() { // } private PermissionsResultListener mListener; private int mRequestCode; /** * 其他 Activity 继承 BaseActivity 调用 performRequestPermissions 方法 * * @param desc 首次申请权限被拒绝后再次申请给用户的描述提示 * @param permissions 要申请的权限数组 * @param requestCode 申请标记值 * @param listener 实现的接口 */ protected void performRequestPermissions(String desc, String[] permissions, int requestCode, PermissionsResultListener listener) { if (permissions == null || permissions.length == 0) { return; } mRequestCode = requestCode; mListener = listener; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (checkEachSelfPermission(permissions)) {// 检查是否声明了权限 requestEachPermissions(desc, permissions, requestCode); } else {// 已经申请权限 if (mListener != null) { mListener.onPermissionGrant da7d ed(); } } } else { if (mListener != null) { mListener.onPermissionGranted(); } } } /** * 申请权限前判断是否需要声明 * * @param desc * @param permissions * @param requestCode */ private void requestEachPermissions(String desc, String[] permissions, int requestCode) { if (shouldShowRequestPermissionRationale(permissions)) {// 需要再次声明 showRationaleDialog(desc, permissions, requestCode); } else { ActivityCompat.requestPermissions(BaseActivity.this, permissions, requestCode); } } /** * 弹出声明的 Dialog * * @param desc * @param permissions * @param requestCode */ private void showRationaleDialog(String desc, final String[] permissions, final int requestCode) { final AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("提示") .setMessage(desc) .setPositiveButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { ActivityCompat.requestPermissions(BaseActivity.this, permissions, requestCode); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.dismiss(); } }) .setCancelable(false) .show(); } /** * 再次申请权限时,是否需要声明 * * @param permissions * @return */ private boolean shouldShowRequestPermissionRationale(String[] permissions) { for (String permission : permissions) { if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) { return true; } } return false; } /** * 检察每个权限是否申请 * * @param permissions * @return true 需要申请权限,false 已申请权限 */ private boolean checkEachSelfPermission(String[] permissions) { for (String permission : permissions) { if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { return true; } } return false; } /** * 申请权限结果的回调 * * @param requestCode * @param permissions * @param grantResults */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == mRequestCode) { if (checkEachPermissionsGranted(grantResults)) { if (mListener != null) { mListener.onPermissionGranted(); } } else {// 用户拒绝申请权限 if (mListener != null) { mListener.onPermissionDenied(); } } } } /** * 检查回调结果 * * @param grantResults * @return */ private boolean checkEachPermissionsGranted(int[] grantResults) { for (int result : grantResults) { if (result != PackageManager.PERMISSION_GRANTED) { return false; } } return true; } }
相关文章推荐
- Android 6.0 运行时权限 fragment的简单封装 basefragment
- Android 6.0 的权限管理自己简单的封装--(到BaseActivity)
- 对Android运行时权限的简单封装
- Android 6.0运行时权限处理与封装(一)
- Android实战之6.0权限申请详解及简单封装(Util方向)
- Android 6.0 运行时权限简单处理
- Android 6.0 运行时权限封装之路
- Android 运行时权限处理封装在 BaseActivity 中,方便业务申请时只需要简单的 1,2 行代码即可成功处理权限申请
- Android 6.0 运行时权限简洁封装
- PermissionsDispatcher库的使用(简单处理Android 6.0系统中的运行时权限的开源库)
- Android 6.0 运行时权限简单处理
- android 6.0以后的运行时权限申请及封装 相关记录
- Android 6.0 运行时权限封装
- Android 6.0运行时权限的改变及封装
- Android 6.0 运行时权限封装框架
- 简单聊一下Android 6.0的运行时权限
- Android 6.0 运行时权限简洁封装
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理完全解析
- Android 6.0 运行时权限处理完全解析