Android6.0权限批量申请

1、 主要接口

检查权限是否被允许
ContextCompat.checkSelfPermission(welcomeActivity.this, permissions[i])
请求权限
ActivityCompat.requestPermissions(this, permissions, MY_PERMISSIONS_REQUEST_CODE);
请求之后的回调
onRequestPermissionsResult(requestCode,permissions,grantResults)

2、 直接创建一个类,复制下面代码到这个类里面,改一下包名就ok
前提是要把需要临时申请的权限声明在manifest文件内

package com.xxx.xxx;

import java.util.ArrayList;
import java.util.List;
import org.cocos2dx.lua.AppActivity;
import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import android.view.View;

public class welcomeActivity extends Activity  {
	
	public static final String TAG = "welcomeActivity";
	private static final int MY_PERMISSIONS_REQUEST_CODE = 10000;
	private String[] permissions = new String[] {       //需要申请的权限
			Manifest.permission.READ_PHONE_STATE,
			Manifest.permission.WRITE_EXTERNAL_STORAGE,
	};
	private List<String> mPermissionList = new ArrayList<String>();
	private String permission = "";
	
	@Override
	protected void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		
		View splash = this.getLayoutInflater().inflate(R.layout.splash2, null, false);
		setContentView(splash);
		
		Log.i(TAG,"onCreate");
		if (android.os.Build.VERSION.SDK_INT <= 23) {
			Intent intent = new Intent(welcomeActivity.this,
            		SplashScreen.class);
            startActivity(intent);
            Log.i(TAG,"super.onDestroy();"); 
            finish();
		}
		else
		{
			getPermissions();
		}
	}
	
	private void getPermissions() {
	    mPermissionList.clear();                                    //清空已经允许的没有通过的权限
	    for (int i = 0; i < permissions.length; i++) {          //逐个判断是否还有未通过的权限
	        if (ContextCompat.checkSelfPermission(welcomeActivity.this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
	        	Log.e("getPermissions() >>>还未授权",permissions[i]);
	            mPermissionList.add(permissions[i]);
	        }
	    }

	    if (mPermissionList.size() > 0) {                           //有权限没有通过,需要申请
	    	Log.e("getPermissions() >>>请求授权",mPermissionList.get(0));
	        ActivityCompat.requestPermissions(this, permissions, MY_PERMISSIONS_REQUEST_CODE);
	    } else {
	        Log.e("getPermissions() >>>", "已经授权");     //权限已经都通过了
	        Log.e("onRequestPermissionsResult >>>", "已全部授权");
            Intent intent = new Intent(welcomeActivity.this,
            		SplashScreen.class);
            startActivity(intent);
            finish();
	    }
	}
	
    @Override
    protected void onResume() {
        super.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
    }
	
	public void onRequestPermissionsResult(int requestCode,  String[] permissions,  int[] grantResults) {
	    boolean hasPermissionDismiss = false;      //有权限没有通过
	    if (MY_PERMISSIONS_REQUEST_CODE == requestCode) {
	        for (int i = 0; i < grantResults.length; i++) {
	            if (grantResults[i] == -1) {
	                hasPermissionDismiss = true;   //发现有未通过权限
	                break;
	             }
	        }
	    }

	    if (hasPermissionDismiss) {                //如果有没有被允许的权限
	        //假如存在有没被允许的权限,可提示用户手动设置 或者不让用户继续操作
	    	showWaringDialog();
	    	//getPermissions();
	    } else {
	        Log.e("onRequestPermissionsResult >>>", "已全部授权");    //授权之后转闪屏activity
            Intent intent = new Intent(welcomeActivity.this,
            		SplashScreen.class);
            startActivity(intent);
            finish();
	    }
    }
	
	private void showWaringDialog() {
        AlertDialog dialog = new AlertDialog.Builder(this)
                .setTitle("警告!")
                .setMessage("请前往设置->应用->PermissionDemo->权限中打开相关权限,否则功能无法正常运行!")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // 一般情况下如果用户不授权的话,功能是无法运行的,做退出处理
                finish();
            }
        }).show();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值