在找Android 6.0动态权限验证资料时找到了一个很简单粗暴的方法,具体的网址忘了收藏,主要是这样写的
public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); } public interface PermissionListener { void onGranted(); void onDenied(List deniedList); } private PermissionListener permissionListener; private int REQUEST_PERMISSION_CODE = 100; public void checkPermission(String[] permissions, PermissionListener permissionListener) { this.permissionListener = permissionListener; List<String> deniedList = new ArrayList(); for (int i = 0; i < permissions.length; i++) { if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) { deniedList.add(permissions[i]); } } if (deniedList.isEmpty()) { this.permissionListener.onGranted(); } else { ActivityCompat.requestPermissions(this, deniedList.toArray(new String[deniedList.size()]), REQUEST_PERMISSION_CODE); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); List<String> deniedList = new ArrayList<>(); for (int i = 0; i < grantResults.length; i++) { if (grantResults[i] != PackageManager.PERMISSION_GRANTED) { deniedList.add(permissions[i]); } } if (deniedList.isEmpty()) permissionListener.onGranted(); else permissionListener.onDenied(deniedList); } }在基类里直接封装好方法即可
注意 1 ContextCompat.checkSelfPermission和ActivityCompat.requestPermission是Android api23为了兼容App运行在<23的机器上而在support library 23以上增加的api,
关于targetSdkVersion和support library,compileSdkVersion关系不清楚可以看这个https://zhidao.baidu.com/question/941110463847739012.html
2.App运行在>=23的真机上时,打开设置,关闭某个权限,会导致系统结束App的进程,再次打开App启动进程时会恢复结束进程前处于onResume的Activity,有些在SplashActivity的初始化处理会没有机会初始化,所以这些必要初始化放在Application中,以免程序崩溃,初始化可以看看这个http://blog.csdn.net/yanzhenjie1003/article/details/52201896。