在Email中添加动态权限请求

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012966861/article/details/78832415

在MainActivity中添加如下内容:

import android.Manifest;
import android.app.Activity;
import android.app.Fragment;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.widget.Toast;
import com.android.email.EmailApplication;
import java.util.HashSet;


private static final String PERMISSION_READ_ATTACHMENT="com.android.email.permission.READ_ATTACHMENT";
private static final int GRANT_PERMISSION_REQUEST_CODE=1;
private boolean mIsChecking=false;
public boolean mPermissionGranted;

@Override
public void onAttachFragment(Fragment frag){
mController.addToFragmentList(frag);
}

@Override
public void onCreate(Bundle savedState){
mViewMode=new ViewMode();
final boolean tableUi=Utils.useTableUI(this.getResources());
mController=createActivityController(this,mViewMode,tableUi);
super.onCreate(savedState);
Intent i=getIntent();
if(i!=null && i.getCategories()!=null &&
i.getCategories().contains(Intent.CATEGORY_LAUNCHER)){
AnalyticsTimer.getInstance().trackStart(AnalyticsTimer.GOLD_START_LAUNCHER);
}
resetSenderImageCache();


mIsChecking=((EmailApplication)getApplication()).getPermissionCheckingStateFlag();
//判断应用是否正在检测权限状态

if(!mIsChecking && hasRequiredPermission(this,PERMISSIONS_LIST,GRANT_PERMISSION_REQUEST_CODE)){
//没有正在检测权限并且存在没有授权的权限需要请求权限
mController.updatePermissionGrantState(true);//更新权限授予状态
mIsChecking=false;//没有在检测权限
((EmailApplication)getApplication()).setPermissionCheckingStateFlag(false);
}else{
//正在检测权限
mController.updatePermissionGrantState(false);
mIsChecking=true;
((EmailApplication)getApplication()).setPermissionCheckingStateFlag(true);
}
mController.onCreate(mIsChecking? null:savedState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
mIsChecking=((EmailApplication)getApplication()).getPermissionCheckingStateFlag();
if(!mIsChecking){
mController.onRestoreInstanceState(savedInstanceState);
}
}

@Override
public void onRequestPermissionsResult(int requestCode,
String[] permission,int[] grantResults){
if(requestCode==GRANT_PERMISSION_REQUEST_CODE){
boolean granted=grantResults.length>0? true:false;//没有授权结果说明授权失败
mIsChecking=false;
((EmailApplication)getApplication()).setPermissionCheckingStateFlag(false);

for(int result:grantResults){//grantResults中存放了每一个权限的授权结果
if(result!=PackageManager.PERMISSION_GRANTED){
granted=false;//结果中有一个没有授权的就说明授权失败
}
}
if(granted){
mController.updatePermissionGrantState(true);//如果全部授权成功,就更新授权状态
recreate();
}else{
Toast.makeText(this,"You have disabled some required permission.",
Toast.LENGTH_LONG).show();
finish();//授权失败,结束活动
}
}else{
super.onRequestPermissionsResult(requestCode,permission,grantResults);
}
}

public static final String[] PERMISSIONS_LIST={
Manifest.permission.READ_CONTACTS,
Manifest.permission.WRITE_CONTACTS,
Manifest.permission.READ_CALENDAR,
Manifest.permission.WRITE_CALENDAR,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
PERMISSION_READ_ATTACHMENT,
};

public static boolean hasRequiredPermission(final Activity activity,
final String[] permissions,final int requestCode){
Hashset<String> absenceSet=new HashSet<String>();//没有授权的权限的存储容器
for(String permission:permissions){
if(ContextCompat.checkSelfPermission(activity,
permission)!=PackageManager.PERMISSION_GRANTED){//判断每一个权限是否已经被授权
absenceSet.add(permission);
}
}
if(!absenceSet.isEmpty()){//存在没有授权的权限
String[] requestArray=new String[absenceSet.size()];
absenceSet.toArray(requestArray);//将HashSet类型转换为数组类型

ActivityCompat.requestPermissions(activity,requestArray,
GRANT_PERMISSION_REQUEST_CODE);//请求权限操作
return false;
}
return true;
}


参考链接http://blog.csdn.net/fenggering/article/details/53432401

猜你喜欢

转载自blog.csdn.net/u012966861/article/details/78832415