Android6.0的動態權限的簡單使用

權限工具activity:

public class BaseActivity extends AppCompatActivity {
    public String[] permissions = new String[]{ //申請的權限
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.BODY_SENSORS,
            Manifest.permission.ACCESS_COARSE_LOCATION,
            Manifest.permission.ACCESS_FINE_LOCATION};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    /**
     * 判斷系統版本是否是Android6.0以上
     * @return
     */
    protected boolean isSystemVersionLarge23(){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            return true;
        }else {
            return false;
        }
    }

    /**
     * 檢查多個權限是否被授予
     * @param permissions 被檢查權限名
     * @return
     */
    protected boolean checkMorePermission(String[] permissions){
        boolean isAllCheck = false;
        for (int i = 0; i < permissions.length; i++) {
            if (ContextCompat.checkSelfPermission(this,permissions[i]) != PackageManager.PERMISSION_GRANTED){
                isAllCheck = true;
                break;
            }
        }
        if (isAllCheck){
            return false;
        }else {
            return true;
        }
    }

    /**
     * 檢查單個權限是否被授予
     * @param permission 被檢查權限名
     * @return
     */
    protected boolean checkOnePermission(String permission){
        if (ContextCompat.checkSelfPermission(this,permission) != PackageManager.PERMISSION_GRANTED){
            return false;
        }else{
            return true;
        }
    }


    /**
     * 請求權限一個或多個
     * @param permissions
     * @param requestCode
     */
    protected void requestOneOrMorePermissions(String[] permissions,int requestCode,AppCompatActivity activity){
        boolean isAllCheck = false;
        for (int i = 0; i < permissions.length; i++) {
            if (!checkOnePermission(permissions[i])){
                isAllCheck = true;
                break;
            }
        }
        if (isAllCheck){
            ActivityCompat.requestPermissions(activity,permissions,requestCode);
        }
    }


    /**
     * 獲取應用版本號
     * @return
     * @throws PackageManager.NameNotFoundException
     */
    protected float getVersionCode(){
        float versionCode = 0;
        try {
            versionCode = getPackageManager().getPackageInfo(getPackageName(),0).versionCode;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return versionCode;
    }

    public void requestSDcardPermission(AppCompatActivity activity,int resultcode){
        //檢查SDcard權限
        if (activity.checkCallingOrSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
                && activity.checkCallingOrSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE},resultcode);
        }


    }
    public void requestSensorPermission(AppCompatActivity activity,int resultcode){
        //檢查傳感器權限
        if (activity.checkCallingOrSelfPermission(Manifest.permission.BODY_SENSORS) != PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.BODY_SENSORS},resultcode);
        }
    }

    public void requestPositionPermission(AppCompatActivity activity,int resultcode){
        //檢查位置權限
        if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                && ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION},resultcode);
        }
    }
}

繼承Baseactivity一次請求多個權限:

public class LauchActivity extends BaseActivity {
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.lauch_activity);

        //判斷系統版本是否是6.0
        if (isSystemVersionLarge23()){
            checkPermission();
        }else {
            prepare();
        }

    }

    private void prepare(){
 		//操作
    }


    private void checkPermission(){

        if (checkMorePermission(permissions)){
                prepare();
        }else {
            requestOneOrMorePermissions(permissions,11,this);//一次請求多個權限
        }
    }


    //申請權限回調  Android6.0以上纔會調用 
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode){
            case 11:
                if (grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                    //所有權限通過纔會
                    prepare();
                }else {
                    //拒絕一個就會這出現
                    showHintDialog("獲取權限失敗!");
                }
                break;
        }
    }

    /**
     * 拒絕權限彈出提示
     * @param messege
     */
    protected void showHintDialog(String messege){
        AlertDialog dialog = new AlertDialog.Builder(this).create();
        dialog.setMessage(messege);
        dialog.setButton(DialogInterface.BUTTON_POSITIVE, "授權", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                checkPermission();
                dialog.dismiss();
            }
        });
        dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "退出", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                finish();
                dialog.dismiss();
            }
        });
        dialog.show();
    }
}

繼承Baseactivity一次請求一個權限:

requestSDcardPermission(this,111);
requestSensorPermission(this,112);
requestPositionPermission(this,113);
/**
 * Android6.0以上動態權限回調
 * @param requestCode
 * @param permissions
 * @param grantResults
 */
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode){
        case 111:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                //權限通過
            }else {
                //拒絕一個就會這出現
                
            }
            break;
        case 112:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                //權限通過

            }else {
                //拒絕一個就會這出現
                
            }
            break;
        case 113:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                //所有權限通過纔會
            }else {
                //拒絕一個就會這出現
                
            }
            break;
        default:
            super.onRequestPermissionsResult(requestCode,permissions,grantResults);
            break;
    }

}


發佈了141 篇原創文章 · 獲贊 36 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章