import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v4.content.ContextCompat; import java.util.ArrayList;
import java.util.List; /**
* DESC 6.0 权限工具类
* Created by douhaoqiang on 2017/2/27.
*/
public class PermissionUtils {
private static final String TAG = "PermissionUtils"; private static int mRequestCode = -1; private static OnPermissionListener mOnPermissionListener; /**
* 权限请求回调
*/
public interface OnPermissionListener { //权限通过
void onPermissionGranted(); //权限拒绝
void onPermissionDenied(); } /**
* 调用请求响应的权限
* @param context 上下文菜单 必须为Activity
* @param requestCode 请求码
* @param permissions 请求权限
* @param listener 权限请求监听
*/
@TargetApi(Build.VERSION_CODES.M)
public static void requestPermissions(Context context, int requestCode
, String[] permissions, OnPermissionListener listener) {
if (context instanceof Activity) {
mOnPermissionListener = listener;
List<String> deniedPermissions = getDeniedPermissions(context, permissions);
if (deniedPermissions.size() > 0) {
mRequestCode = requestCode;
((Activity) context).requestPermissions(deniedPermissions
.toArray(new String[deniedPermissions.size()]), requestCode); } else {
if (mOnPermissionListener != null)
mOnPermissionListener.onPermissionGranted();
}
} else {
throw new RuntimeException("Context must be an Activity");
}
} /**
* 获取请求权限中需要授权的权限
*/
private static List<String> getDeniedPermissions(Context context, String... permissions) {
List<String> deniedPermissions = new ArrayList<>();
for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_DENIED) {
deniedPermissions.add(permission);
}
}
return deniedPermissions;
} /**
* 请求权限结果,对应Activity中onRequestPermissionsResult()方法。
*/
public static void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (mRequestCode != -1 && requestCode == mRequestCode) {
if (mOnPermissionListener != null) {
if (verifyPermissions(grantResults)) {
mOnPermissionListener.onPermissionGranted();
} else {
mOnPermissionListener.onPermissionDenied();
}
}
}
} /**
* 验证所有权限是否都已经授权
*/
private static boolean verifyPermissions(int[] grantResults) {
for (int grantResult : grantResults) {
if (grantResult != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
} }

使用:

public class SplashActivity extends Activity {

    String[] permissions = {
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.CAMERA,
Manifest.permission.RECORD_AUDIO }; @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN); //全屏
setContentView(R.layout.activity_splash);
requestPermissions(); } public void requestPermissions() {
PermissionUtil.requestPermissions(this, 1, permissions, new PermissionUtil.OnPermissionListener() { @Override
public void onPermissionGranted() {
startActivity(new Intent(SplashActivity.this, MainActivity.class));
finish();
} @Override
public void onPermissionDenied() {
finish();
}
});
} @Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
PermissionUtil.onRequestPermissionsResult(requestCode, permissions, grantResults);
} //隐藏虚拟导航栏按键
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN
);
}
} }

最新文章

  1. 使用github page 页面建博客中遇到的几个小问题
  2. Altium Designer 常用的快捷键
  3. iOS--cocopod升级新版本
  4. hdu2888 二维RMQ
  5. 运行在linux上的mysql常用命令
  6. Unity3d中C#使用指针(Unsafe)的办法(转)
  7. Echarts事件
  8. 安全delete,添加refenerce,release
  9. Noip2013错误避免
  10. properties + IO 读取配置文件
  11. 自动化运维:使用flask+mysql+highcharts搭建监控平台
  12. java实现生产者/消费者的三种方式
  13. HDU 5984.Pocky(2016 CCPC 青岛 C)
  14. JZOJ 5602.【NOI2018模拟3.26】Cti
  15. linux命令行命令
  16. Hashtable 删除元素, 抛出异常 java.util.ConcurrentModificationException
  17. git pull和push冲突
  18. 奇怪吸引子---ChenLee
  19. awbeci网站之技术篇
  20. Linux主要shell命令详解(上)

热门文章

  1. Hyperledger Fabric 环境搭建(1)
  2. String,到底创建了多少个对象?
  3. re:正则表达式,字符串处理的杀手锏
  4. 欧拉函数 || [SDOI2008]仪仗队 || BZOJ 2190 || Luogu P2158
  5. Fiddler debug 拦截文件
  6. JavaScript 正则表达式——定义,目的,特点,语法,字符串方法,search() ,replace() ,test(),exec()
  7. HTML DOM 事件与方法
  8. 定时任务spring task
  9. javascript中创建对象的方式及优缺点(二)
  10. CF 672C 两个人捡瓶子 最短路与次短路思想