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();
}
}