import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;
public class StartActivity extends BaseActivity {
public String[] permArray = { Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA,
Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.KILL_BACKGROUND_PROCESSES,
Manifest.permission.RESTART_PACKAGES
};
protected boolean isPermissionsAllGranted(){
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M){
return true;
}
//获得批量请求但被禁止的权限列表
List<String> deniedPerms = new ArrayList<String>();
for(int i=0;permArray!=null&&i<permArray.length;i++){
if(PackageManager.PERMISSION_GRANTED != checkSelfPermission(permArray[i])){
deniedPerms.add(permArray[i]);
}
}
//进行批量请求
int denyPermNum = deniedPerms.size();
if(denyPermNum != 0){
requestPermissions(deniedPerms.toArray(new String[denyPermNum]),1);
//return false;
}
for(int i=0;MainActivity.permArray!=null&&i<MainActivity.permArray.length;i++){
if(PackageManager.PERMISSION_GRANTED != checkSelfPermission(MainActivity.permArray[i])){
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
i =-1;
}
}
return true;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
AuthorizationTask authorizationTask = new AuthorizationTask();
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB_MR1) {
authorizationTask.execute();
} else {
authorizationTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
}
public class AuthorizationTask extends AsyncTask<Integer, Integer, String> {
//后面尖括号内分别是参数(例子里是线程休息时间),进度(publishProgress用到),返回值 类型
@Override
protected void onPreExecute() {
//第一个执行方法
super.onPreExecute();
}
@Override
protected String doInBackground(Integer... params) {
//第二个执行方法,onPreExecute()执行完后执行
isPermissionsAllGranted();
publishProgress();
return "";
}
@Override
protected void onProgressUpdate(Integer... progress) {
//这个函数在doInBackground调用publishProgress时触发,虽然调用时只有一个参数
//但是这里取到的是一个数组,所以要用progesss[0]来取值
//第n个参数就用progress[n]来取值
Intent intent = new Intent(StartActivity.this, MainActivity.class);
startActivity(intent);
finish();
super.onProgressUpdate(progress);
}
@Override
protected void onPostExecute(String result) {
//doInBackground返回时触发,换句话说,就是doInBackground执行完后触发
//这里的result就是上面doInBackground执行后的返回值,所以这里是"执行完毕"
super.onPostExecute(result);
}
}
}
网友评论